

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon SQS FIFO 队列和 Lambda 并发行为
<a name="fifo-queue-lambda-behavior"></a>

通过将 FIFO（先进先出）队列与 Lambda 结合使用，您可以确保每个消息组内消息的有序处理。Lambda 函数不会同时为同一个消息组运行多个实例，从而保证消息处理的顺序。但是，它可以纵向扩展以并行处理多个消息组，从而确保高效处理队列的工作负载。以下几点描述了 Lambda 函数在处理来自消息组的 Amazon SQS FIFO 队列的消息时的行为： IDs
+ **每个消息组对应单个实例：**在任何时候，只有一个 Lambda 实例会处理来自特定消息组 ID 的消息。这样可以确保同一组内的消息按照顺序处理，从而保持 FIFO 顺序的完整性。
+ **并行处理不同的组：**Lambda 可以使用多个实例同时处理来自不同消息组 IDs 的消息。这意味着，当 Lambda 函数的一个实例处理来自一个消息组 ID 的消息时，其他实例可以同时处理来自其他消息组的消息 IDs，利用 Lambda 的并发功能并行处理多个组。

## FIFO 队列消息分组
<a name="fifo-queue-message-grouping"></a>

FIFO 队列可以确保严格按照消息的发送顺序对其进行处理。它们使用**消息组 ID** 对需要按顺序处理的消息进行分组。

同一消息组中的消息按顺序处理，并且系统每次仅处理每个消息组中的一条消息，以便保持该顺序。

## Lambda 与 FIFO 队列的并发处理
<a name="lambda-concurrency-fifo-queues"></a>

创建队列后，您可以向该队列发送消息。

当您设置 Lambda 函数来处理来自 Amazon SQS FIFO 队列的消息时，Lambda 会遵守 FIFO 队列提供的顺序保证。以下几点描述了在使用消息组时处理来自 Amazon SQS FIFO 队列的消息时，Lambda 函数在并发性和扩展方面的行为。 IDs
+ **消息组内的并发性：**一次只有一个 Lambda 实例处理某个特定消息组 ID 的消息。这样可以确保同一组内的消息按照顺序处理。
+ **扩展性和多个消息组：**虽然 Lambda 可以纵向扩展以并发处理消息，但这种扩展是针对不同的消息组进行的。如果您有多个消息组，Lambda 可以并行处理多个消息组，每个消息组由单独的 Lambda 实例处理。

有关更多信息，请参阅《AWS Lambda Operator Guide》**中的 [Scaling and concurrency in Lambda](https://docs.aws.amazon.com/lambda/latest/operatorguide/scaling-concurrency.html)。

## 使用案例示例
<a name="lambda-concurrency-fifo-queues-example"></a>

假设您的 FIFO 队列收到具有相同消息组 ID 的消息，并且您的 Lambda 函数具有较高的并发限制（最多 1000 条）。

如果系统正在处理来自消息组 ID“A”的一条消息，而来自消息组 ID“A”的另一条消息到达，则在第一条消息完全处理完毕之前，第二条消息不会触发新的 Lambda 实例。

但是，如果来自组 IDs “A” 和 “B” 的消息到达，则这两条消息可以由单独的 Lambda 实例同时处理。