使用 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 的重复数据消除间隔为 5 分钟。在重复数据删除时间间隔过期后重试 SendMessage 请求可能会将重复的消息引入队列中。例如,车辆中的移动设备将发送其顺序很重要的消息。如果车辆在接收确认前一段时间失去手机网络连接,则在重新获得手机网络连接之前重试请求可能产生重复项。

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

处理可见性超时

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