本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon SQS 消息去重 ID
消息重复数据删除 ID 是用于对已发送消息重复数据删除 ID 重复数据删除 ID 用于对已发送消息重复数据删除重复数据删除 ID 如果成功发送了具有特定消息重复数据删除 ID 的消息,则任何使用相同消息去重 ID 发送的消息都将被成功接受,但不会在 5 分钟重复数据删除间隔内传送。
消息重复数据删除适用于整个队列,而不是单个消息组。
Amazon SQS 继续跟踪消息重复数据删除 ID,即使在收到消息删除消息重复数据删除 ID 之后也是如此。
提供消息重复数据删除 ID
在以下情况下,创建者应为每条消息提供消息去重 ID 值:
-
使用相同的消息正文发送的消息,Amazon SQS 必须将其视为唯一消息。
-
发送的消息内容相同,但消息属性不同,Amazon SQS 必须将其视为唯一的。
-
发送的带有不同内容(例如,消息正文中包含的重试次数)的消息,Amazon SQS 必须将其视为重复内容。
为单一生产者/消费者系统启用重复数据删除
如果您有单一的创建者和单一的使用者并且消息都是唯一的 (因为消息正文中包含特定于应用程序的消息 ID),请遵循最佳实践:
-
为队列启用基于内容的重复数据删除 (每条消息都具有唯一的正文)。创建者可忽略消息重复数据删除 ID。
-
尽管使用者无需为每个请求提供接收请求尝试 ID,但最好提供,因为这样可以更快地执行失败-重试序列。
-
您可以重试发送或接收请求,因为它们不会干扰 FIFO 队列中消息的排序。
针对中断恢复场景进行设计
FIFO 队列中的重复数据删除过程对时间很敏感。在设计应用程序时,请确保生产者和使用者都能在客户端或网络中断时恢复。
-
生产者必须知道队列的重复数据删除间隔。Amazon SQS 的重复数据删除间隔为 5 分钟。在重复数据删除时间间隔过期后重试
SendMessage
请求可能会将重复的消息引入队列中。例如,车辆中的移动设备将发送其顺序很重要的消息。如果车辆在接收确认前一段时间失去手机网络连接,则在重新获得手机网络连接之前重试请求可能产生重复项。 -
使用者必须具有可见性超时,以便将在可见性超时过期之前无法处理消息的风险降至最低。您可通过调用
ChangeMessageVisibility
操作延长处理消息时的可见性超时。但是,如果可见性超时过期,其他使用者可立即开始处理消息,从而导致多次处理消息。要避免这种情况,请配置死信队列。
处理可见性超时
要获得最佳性能,请将可见性超时设置为大于 Amazon 开发工具包读取超时。这适用于在短轮询或长轮询中使用ReceiveMessage
API 操作。