带有lambda的AWS FIFO队列–每个消息组一个并发lambda

时间:2019-11-25 11:44:34

标签: amazon-web-services aws-lambda amazon-sqs

我已经建立了一个FIFO队列,我想按消息组ID对消息进行分区。

作为事件触发器,我正在使用lambda函数。

现在我的问题是:是否可以为每个消息组只允许一个并发的lambda函数调用?

因此,如果我有Group AGroup B,并且每个消息组有20条消息,则每个消息组一次将一条消息(我已将批处理大小设置为1)传递给lambda函数,并且仅在上一个消息处理完成后才传递下一个。

是否可以使用FIFO队列和lambda,还是需要研究其他服务以允许这样做?

注意:我已经在研究带有单独分片的Kinesis,但是由于会有很多消息组,所以分片的总成本会太大。

谢谢!

2 个答案:

答案 0 :(得分:1)

它应该以您想要的开箱即用的方式工作。

New for AWS Lambda – SQS FIFO as an event source

在SQS FIFO队列中,使用多个MessageGroupId可使Lambda使用更大的并发限制来扩展并处理队列中的更多项目。 并发总数等于或小于SQS FIFO队列中唯一MessageGroupId的数量。

答案 1 :(得分:0)

有三个规则控制消息离开 FIFO 队列的顺序,以帮助理解处理行为:

  1. 返回最旧的消息,其中没有其他具有相同 MessageGroupId 的消息正在传输中。
  2. 返回尽可能多的具有相同 MessageGroupId 的消息。
  3. 如果消息批次仍未满,请返回第一条规则。因此,单个批次可能包含来自多个 MessageGroupId 的消息。