

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

# 结合使用消息组 ID 和 Amazon SQS FIFO 队列
<a name="using-messagegroupid-property"></a>

在 FIFO（先进先出）队列中，[https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) 是一个将消息组织成不同组的属性。同一消息组内的消息始终按照严格的顺序逐条处理，从而确保同一组内绝不会有两条消息同时被处理。在标准队列中，使用 `MessageGroupId` 启用[公平队列](sqs-fair-queues.md)。如果需要严格排序，请使用 FIFO 队列。

**Topics**
+ [在 Amazon SQS 中交错多个有序消息组](interleaving-multiple-ordered-message-groups.md)
+ [在 Amazon SQS 的多创建者/使用者系统中避免处理重复消息](avoding-processing-duplicates-in-multiple-producer-consumer-system.md)
+ [避免在 Amazon SQS 中出现具有相同消息组 ID 的大量消息积压](avoid-backlog-with-the-same-message-group-id.md)
+ [避免在 Amazon SQS 中的虚拟队列中重复使用相同的消息组 ID](avoiding-reusing-message-group-id-with-virtual-queues.md)

# 在 Amazon SQS 中交错多个有序消息组
<a name="interleaving-multiple-ordered-message-groups"></a>

要在交错一个 FIFO 队列中的多个有序消息组，请为每个组分配一个 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)（例如，不同用户的会话数据）。这可以让多个使用者能够同时从队列中读取消息，同时确保同一组内的消息按顺序处理。

当具有特定 `MessageGroupId` 的消息正在进行处理且不可见时，任何其他使用者均无法处理来自同一组的消息，直至可见性超时结束或消息被删除。

# 在 Amazon SQS 的多创建者/使用者系统中避免处理重复消息
<a name="avoding-processing-duplicates-in-multiple-producer-consumer-system"></a>

在一个高吞吐量、低延迟且消息顺序并非优先事项的系统中，创建者可为每条消息分配唯一的 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)。这可以确保即使在多创建者/多使用者设置中，Amazon SQS FIFO 队列也能消除重复项。虽然这种方法可以防止重复的消息，但无法保证消息的顺序，因为每条消息都被视为自己的独立组。

在任何具有多个创建者和使用者的系统中，都存在重复传递消息的风险。如果使用者未能在可见性超时结束前处理消息，Amazon SQS 会使该消息再次可用，从而导致其他使用者可能会接收该消息。为了缓解这个问题，请确保根据处理时间正确设置消息确认和可见性超时。

# 避免在 Amazon SQS 中出现具有相同消息组 ID 的大量消息积压
<a name="avoid-backlog-with-the-same-message-group-id"></a>

FIFO 队列最多支持 12 万条传输中消息（使用者已接收但尚未删除的消息）。如果达到此上限，Amazon SQS 不会返回错误，但处理可能会受到影响。您可以联系 [AWS Support](https://docs.aws.amazon.com/awssupport/latest/user/create-service-quota-increase.html) 申请提高此上限。

FIFO 队列会浏览前 12 万条消息，以确定可用的消息组。如果单个消息组中积压了大量消息，则在积压消息处理完毕之前，其他组后续发送的消息将持续被阻止。

**注意**  
当使用者反复多次处理失败时，就可能会导致消息积压。这可能是由于消息内容问题或使用者端故障所致。为防止消息处理延迟，请配置[死信队列](sqs-dead-letter-queues.md)，用于在多次处理失败后转移未处理的消息。这样可以确保同一消息组中的其他消息得到处理，从而避免系统出现瓶颈。

# 避免在 Amazon SQS 中的虚拟队列中重复使用相同的消息组 ID
<a name="avoiding-reusing-message-group-id-with-virtual-queues"></a>

将虚拟队列与共享主机队列一起使用时，请避免在不同的虚拟队列中重复使用相同的 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)。如果多个虚拟队列共享同一主机队列且包含具有相同 `MessageGroupId` 的消息，这些消息可能会相互阻塞，以至阻碍高效处理。为确保顺利处理消息，请为不同虚拟队列中的消息分配唯一的 `MessageGroupId` 值。