Amazon Simple Queue Service
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

使用 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 操作延长处理消息时的可见性超时。但是,如果可见性超时过期,其他使用者可立即开始处理消息,从而导致多次处理消息。要避免这种情况,请配置死信队列