使用 Amazon SQS 消息重复数据删除 ID - Amazon Simple Queue Service

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

使用 Amazon SQS 消息重复数据删除 ID

消息重复数据删除 ID 是用于对已发送消息进行重复数据删除的令牌。如果成功发送了带有特定消息重复数据删除 ID 的消息,则所有使用相同消息重复数据删除 ID 发送的消息都将被成功接受,但不会在 5 分钟的重复数据删除间隔内传输。

注意

Amazon SQS 继续跟踪消息重复数据删除 ID,即使在消息被接收和删除之后也是如此。

提供消息重复数据删除 ID

创建者应在下列情况下为发送的每条消息提供消息重复数据删除 ID 值:

  • Amazon SQS 必须视为唯一项的包含相同消息正文的已发送消息。

  • Amazon SQS 必须视为唯一项且内容相同、但消息属性不同的已发送消息。

  • Amazon SQS 必须视为重复项且内容不同(例如,包含在消息正文中的重试计数不同)的已发送消息。

为单一创建者/使用者系统启用重复数据删除

如果您有单一的创建者和单一的使用者并且消息都是唯一的(因为消息正文中包含特定于应用程序的消息 ID),请遵循最佳实践:

  • 为队列启用基于内容的重复数据删除(每条消息都具有唯一的正文)。创建者可忽略消息重复数据删除 ID。

  • 如果为 Amazon SQS FIFO 队列启用基于内容的重复数据删除,并且发送了带有重复数据删除 ID 的消息,则重复数据删除 ID 将覆盖生成的基于内容的SendMessage重复数据删除 ID。

  • 尽管使用者无需为每个请求提供接收请求尝试 ID,但最好提供,因为这样可以更快地执行失败-重试序列。

  • 请求不会干扰消息在 FIFO 队列中的顺序,因此可重试发送或接收请求。

针对中断恢复场景进行设计

FIFO 队列中的重复数据删除过程具有时效性。在设计应用程序时,应确保创建者和使用者均可在客户端故障或网络中断的情况下进行恢复。

  • 创建者必须了解队列的重复数据删除间隔。Amazon SQS 的重复数据删除间隔为 5 分钟。在重复数据删除时间间隔过期后重试 SendMessage 请求可能会将重复的消息引入队列中。例如,车辆中的移动设备将发送其顺序很重要的消息。如果车辆在接收确认前一段时间失去手机网络连接,则在重新获得手机网络连接之前重试请求可能产生重复项。

  • 使用者必须具有可见性超时,以便将在可见性超时过期之前无法处理消息的风险降至最低。您可通过调用 ChangeMessageVisibility 操作延长处理消息时的可见性超时。但是,如果可见性超时过期,其他使用者可立即开始处理消息,从而导致多次处理消息。要避免这种情况,请配置死信队列

处理可见性超时

为了获得最佳性能,请将可见性超时设置为大于 AWS SDK 读取超时。这适用于在短轮询长轮询中使用 ReceiveMessage API 操作。