![](/img/trans.png)
[英]Why is my lambda function not able to consume messages sent by SQS in AWS?
[英]Consume SQS messages using AWS lambda function
我有2个FIFO SQS队列,它接收要索引到elasticsearch的JSON消息。 一个队列不断向数据库添加增量更改并将其添加到队列中。 第二个队列用于数据库重新索引,即整个50Tb,如果数据要每隔几个月编入索引(其中所有内容都被添加到队列中)。 我有一个lambda函数,它使用来自队列的消息并将它们放入适当的队列(活动索引或正在重建的索引)。
我应该如何触发lambda函数以最好地处理SQS中的积压消息,以便尽快处理这两个队列?
我有一个约束是需要按顺序处理队列项。 如果lambda函数可以在没有5分钟限制的情况下无限期运行,我可以继续运行一个不断处理消息的函数。
执行此操作的标准方法是使用定期运行的Cloudwatch Events 。 这使您可以定期从队列中提取数据。
因为您必须轮询SQS,这可能不会导致最快的消息处理。 另外,如果你经常要处理消息,要小心 - Lambda最终会比处理消息的小EC2实例贵得多。
您可以将消息发布到SNS
主题,而不是将消息直接发送到SQS
,并注册了2个订阅者。
具有在消息存储在SQS
中的同时调用Lambda的好处。
不确定我完全理解你的问题,但这是我的2美分:
如果您有一个恒定且实时的数据流,请考虑使用带有1个分片的 Kinesis Streams
以保留FIFO。 您可以使用lambda
以n
项目的方式使用数据。 由您决定批量大小n
和lambda
的内存大小。
Kinesis Streams
和可变价格Lambdas
。 如果您真的爱上了SQS
并且实时不满足 ,您可以使用Lambdas
或EC2
或Batch
来消费。 您可以使用CloudWatch Events
触发许多lambdas
,要么保持EC2
,要么定期触发AWS Batch
作业。
SQS
+ Lambdas
时,有一些项目,消费和SQS
+ Batch
时有很多项目要消耗的。 您可能会也可能考虑使用SNS
+ SQS
+ Lambdas
像@maikay他回答说,但我不会选择的解决方案。
希望能帮助到你。 随意要求澄清。 祝好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.