使用 Amazon SQS 消息组 ID - Amazon Simple Queue Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

使用 Amazon SQS 消息组 ID

消息组 ID 是 指定某条消息属于特定消息组的标签。属于同一消息组的消息总是严格按照与消息组有关的某个顺序逐一进行处理(但是属于不同消息组的消息则不会进行有序处理)。

交错多个有序消息组

要在单个FIFO队列中交错多个已排序的消息组,请使用消息组ID值(例如,多个用户的会话数据)。在此情形中,多个消费者可以处理队列,但每个用户的会话数据以FIFO方式处理。

注意

如果属于某个特殊消息组 ID 的消息不可见,则其他使用者可处理具有相同消息组 ID 的消息。

避免在多创建者/使用者系统中处理重复项

在吞吐量和延迟比顺序更重要的情况下,若要在具有多个创建者和使用者的系统中避免处理重复消息,创建者应为每条消息生成一个唯一的消息组 ID。

注意

在此情况下,将消除重复项。但是,无法保证消息的顺序。

存在多个创建者和使用者的任何情况都会增加无意中传递重复消息的风险 (如果工作线程在可见性超时内未处理消息,并且消息变得对其他工作线程可用)。

避免具有相同消息组 ID 的消息大量积压

对于 FIFO 队列,其传输中的消息的最大数目为 20000 条(使用者已从队列接收,但尚未从队列中删除)。如果您达到此限制,Amazon SQS 不会返回任何错误消息。 如果您的队列有20,000条或更多消息的相同消息组ID的大量积压,FIFO队列可能无法返回具有不同消息组ID的消息,但稍后会发送到队列,直到您成功消耗来自积压消息的消息。

注意

具有相同消息组 ID 的消息的积压可能是由于使用者无法成功处理一条消息造成的。消息处理问题可能是由于消息内容问题或使用者技术问题造成的。

要移走消息以免反复处理该消息,并取消阻止对具有相同消息组 ID 的其他消息的处理,请考虑设置死信队列策略。

避免在虚拟队列中重复使用相同的消息组 ID

要防止发送到具有相同主机队列的不同虚拟队列且具有相同消息组 ID 的消息互相阻塞,请避免在虚拟队列中重复使用相同的消息组 ID。