繁体   English   中英

使用AWS lambda函数使用SQS消息

[英]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个订阅者。

  1. 订阅者:SQS
  2. 订阅者:Lambda函数

具有在消息存储在SQS中的同时调用Lambda的好处。

不确定我完全理解你的问题,但这是我的2美分:

  1. 如果您有一个恒定实时的数据流,请考虑使用带有1个分片的 Kinesis Streams以保留FIFO。 您可以使用lambdan项目的方式使用数据。 由您决定批量大小nlambda的内存大小。

    • 与此解决方案,您只需交纳较低的固定价格Kinesis Streams和可变价格Lambdas
  2. 如果您真的爱上SQS并且实时不满足 ,您可以使用LambdasEC2Batch来消费。 您可以使用CloudWatch Events触发许多lambdas ,要么保持EC2 ,要么定期触发AWS Batch作业。

    • 有一个经济方程式需要探索,每个解决方案对一个用例最好,而对另一个用例最差,做出你的选择;)
    • 我喜欢SQS + Lambdas时,有一些项目,消费和SQS + Batch时有很多项目要消耗的。
  3. 您可能会也可能考虑使用SNS + SQS + Lambdas像@maikay他回答说,但我不会选择的解决方案。

希望能帮助到你。 随意要求澄清。 祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM