本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用Amazon SQS 消息组 ID
消息组 ID 是指定消息属于特定消息组的标记。属于同一消息组的消息始终按相对于消息组的严格顺序逐个处理 (但是,属于不同消息组的消息可能会按顺序处理)。
交错多个有序消息组
要交错一个 FIFIFIFIFI 队列中的多个有序消息组,请使用消息组 ID 值 (例如,多个用户的会话数据)。在此情况下,多个使用者可处理此队列,但每个用户的会话数据是按FIFIFIFI方式处理的。
如果属于某个特殊消息组 ID 的消息不可见,则其他使用者可处理具有相同消息组 ID 的消息。
避免在多创建者/使用者系统中处理重复项
在吞吐量和延迟比顺序更重要的情况下,若要在具有多个创建者和使用者的系统中避免处理重复消息,创建者应为每条消息生成一个唯一的消息组 ID。
在此情况下,将消除重复项。但是,无法保证消息的顺序。
存在多个创建者和使用者的任何情况都会增加无意中传递重复消息的风险 (如果工作线程在可见性超时内未处理消息,并且消息变得对其他工作线程可用)。
避免具有相同消息组 ID 的消息大量积压
对于 FIFO 队列,飞行消息最多可以有 20,000 条(由消费者从队列中接收,但尚未从队列中删除)。如果您达到此配额,Amazon SQS 则不返回任何错误消息。FIFO 队列会查看前 20k 条消息,以确定可用的消息组。这意味着,如果您在单个消息组中积压消息,则在您成功处理完这些积压消息前,您无法处理其他消息组中发送到此队列的消息。
具有相同消息组 ID 的消息的积压可能是由于使用者无法成功处理一条消息造成的。消息处理问题可能是由于消息内容问题或使用者技术问题造成的。
要移走消息以免反复处理该消息,并取消阻止对具有相同消息组 ID 的其他消息的处理,请考虑设置死信队列策略。
避免在虚拟队列中重复使用相同的消息组 ID
防止具有相同消息组 ID 的消息发送到不同的消息组 ID虚拟队列避免在相同主机队列中进行阻塞,请避免在虚拟队列中重复使用相同的消息组 ID。