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

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

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

消息重复数据删除 ID 为已发送消息的重复数据删除所使用的令牌。如果成功发送具有特定消息重复数据消除 ID 的邮件,则会成功接受具有相同消息重复数据消除 ID 的任何邮件,但不会在 5 分钟的重复数据消除间隔内传递。

注意

消息重复数据消除适用于整个队列,而不适用于单个邮件组。

即使在收到和删除消息之后,Amazon SQS 也会继续跟踪消息重复数据消除 ID。

提供消息重复数据删除 ID

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

  • Amazon SQS 必须将其视为唯一项的具有相同消息正文的已发送消息。

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

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

为单一生产者/使用者系统使用重复数据删除

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

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

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

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

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

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

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

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

处理可见性超时

要获得最佳性能,请将可见性超时设置为大于 Amazon 开发工具包读取超时。这适用于使用ReceiveMessageAPI 操作短轮询或者长轮询