Amazon SQS 中的中断恢复场景
FIFO 队列中的重复数据删除过程具有时效性。在设计应用程序时,请确保创建者和使用者均可在客户端或网络中断时恢复运行,而不会引入重复数据或出现处理失败。
创建者注意事项
-
Amazon SQS 强制执行 5 分钟的重复数据删除时段。
-
如果创建者在 5 分钟后重试
SendMessage请求,Amazon SQS 会将其视为新消息,这可能导致消息重复。
使用者注意事项
-
如果使用者未能在可见性超时结束前处理消息,其他使用者可能会接收并处理该消息,从而导致重复处理。
-
根据应用程序的处理时间调整可见性超时。
-
使用
ChangeMessageVisibilityAPI 在消息仍在处理时延长超时。 -
如果消息反复处理失败,请将其路由至死信队列(DLQ),而不是允许无限期地对其进行重新处理。
-
创建者必须了解队列的重复数据删除间隔。Amazon SQS 的重复数据删除间隔为 5 分钟。在重复数据删除时间间隔过期后重试
SendMessage请求可能会将重复的消息引入队列中。例如,车辆中的移动设备将发送其顺序很重要的消息。如果车辆在接收确认前一段时间失去手机网络连接,则在重新获得手机网络连接之前重试请求可能产生重复项。 -
使用者必须具有可见性超时,以便将在可见性超时过期之前无法处理消息的风险降至最低。您可通过调用
ChangeMessageVisibility操作延长处理消息时的可见性超时。但是,如果可见性超时过期,其他使用者可立即开始处理消息,从而导致多次处理消息。要避免这种情况,请配置死信队列。