如何实现 Amazon SQS (fifo)-lambda 与消息处理完全一对一
How to implement Amazon SQS (fifo)-lambda with message processing EXACTLY ONE BY ONE
我有一个用例,其中我有一个带有 lambda 函数的 Amazon SQS fifo 队列。我需要确保 fifo 仅在前一个 lambda 执行完成时触发 lambda(事件也是按顺序进行的)。从 aws 文档开始,fifo 只支持一次处理,但它没有在任何地方提到它不会在 lambda 上推送更多事件,直到第一条消息被完全处理。
我需要确保仅当 lambda 函数完全处理上一条消息时才处理下一条消息。
当消息 1 完全被 lambda 处理 时,是否有办法确保消息 2 只被 lambda 处理?
这其实很容易做到。没有明确说明,因为默认情况下它会简单地用完可用的帐户并发并尽可能多地并行处理消息。
您可以通过将 lambda 函数的 the reserved concurrency 设置为 1 来影响这一点。这将确保不会同时执行超过 1 个 lambda 函数。
fifo supports exactly once processing but it does not mention anywhere
that it would not push more event on lambda untill the first message
is completely processed.
SQS 从不在任何地方推送任何东西。您必须轮询 SQS 以获取消息。当您配置 Lambda 与 SQS 的集成时,Lambda 实际上是 运行 一个在幕后为您轮询 SQS 的过程。
AWS FIFO 队列允许您通过指定 Message Group ID 强制按顺序处理消息。当您为多条消息指定相同的消息组 ID 时,FIFO 队列一次只会使其中一条消息可用(按照先进先出的顺序)。只有在第一条消息从队列中移除后,第二条消息才可用,依此类推...
除此之外,您应该将 AWS Lambda SQS 与 Lambda 函数上的 Batch Size of 1
, so that it doesn't try to wait for multiple messages to be available before processing. And you could configure the Reserved Concurrency 集成配置为 1
,如其他答案中所述,这样只有一个 Lambda 实例函数一次可以 运行。
我有一个用例,其中我有一个带有 lambda 函数的 Amazon SQS fifo 队列。我需要确保 fifo 仅在前一个 lambda 执行完成时触发 lambda(事件也是按顺序进行的)。从 aws 文档开始,fifo 只支持一次处理,但它没有在任何地方提到它不会在 lambda 上推送更多事件,直到第一条消息被完全处理。
我需要确保仅当 lambda 函数完全处理上一条消息时才处理下一条消息。
当消息 1 完全被 lambda 处理 时,是否有办法确保消息 2 只被 lambda 处理?
这其实很容易做到。没有明确说明,因为默认情况下它会简单地用完可用的帐户并发并尽可能多地并行处理消息。
您可以通过将 lambda 函数的 the reserved concurrency 设置为 1 来影响这一点。这将确保不会同时执行超过 1 个 lambda 函数。
fifo supports exactly once processing but it does not mention anywhere that it would not push more event on lambda untill the first message is completely processed.
SQS 从不在任何地方推送任何东西。您必须轮询 SQS 以获取消息。当您配置 Lambda 与 SQS 的集成时,Lambda 实际上是 运行 一个在幕后为您轮询 SQS 的过程。
AWS FIFO 队列允许您通过指定 Message Group ID 强制按顺序处理消息。当您为多条消息指定相同的消息组 ID 时,FIFO 队列一次只会使其中一条消息可用(按照先进先出的顺序)。只有在第一条消息从队列中移除后,第二条消息才可用,依此类推...
除此之外,您应该将 AWS Lambda SQS 与 Lambda 函数上的 Batch Size of 1
, so that it doesn't try to wait for multiple messages to be available before processing. And you could configure the Reserved Concurrency 集成配置为 1
,如其他答案中所述,这样只有一个 Lambda 实例函数一次可以 运行。