如何通过一对一的消息处理来实施 Amazon SQS (fifo)-lambda

Wal*_*mad 3 queue message-queue amazon-sqs amazon-web-services aws-lambda

我有一个用例,其中有一个带有 lambda 函数的 Amazon SQS fifo 队列。我需要确保 fifo 仅在前一个 lambda 执行完成时才触发 lambda(事件也按顺序出现)。从 aws 文档来看,fifo 支持一次处理,但它没有在任何地方提到它不会在 lambda 上推送更多事件,直到第一条消息完全处理为止

我需要确保仅当 lambda 函数完全处理前一条消息时才处理下一条消息。

有没有办法确保当消息 1 完全由 lambda 处理时,消息 2 只由 lambda 处理?

Mar*_*k B 6

fifo 支持一次处理,但它没有在任何地方提到它不会在 lambda 上推送更多事件,直到第一个消息被完全处理。

SQS 从来不会把任何东西推到任何地方。您必须轮询 SQS 来获取消息。当您配置 Lambda 与 SQS 集成时,Lambda 实际上是在后台运行一个进程来为您轮询 SQS。

AWS FIFO 队列允许您通过指定消息组 ID强制按顺序处理消息。当您为多条消息指定相同的消息组 ID 时,FIFO 队列一次只会使其中一条消息可用(按照先进先出的顺序)。只有在第一条消息从队列中删除后,第二条消息才可用,依此类推......

除此之外,您还应该将 AWS Lambda SQS 集成配置为Batch Size1这样它就不会尝试等待多条消息可用后再进行处理。您可以将Lambda 函数上的预留并发1配置为,如另一个答案中所述,以便一次只能运行一个 Lambda 函数实例。