AWS FIFO SQS:当消息卡在DLQ中时,SQS如何维持组中的顺序?



我计划使用AWS FIFO SQS来记录数据存储中每个项目的当前状态。我将使用每个项目的唯一标识符作为messageGroupId,以确保每个项目的消息严格排序。

SQS是否确保如果属于特定组的消息在DLQ中,那么在DLQ消息被删除或重新驱动回主队列之前,该组的任何消息都不会对消费者可见?

例如,可以按顺序接收以下三条消息:

(groupIdA, M1)
(groupIdA, M2)
(groupIdA, M3)

我的轮询器成功消耗了M1,但未能处理M2。它会一直尝试,直到maxReceive计数耗尽,然后SQS将消息推送到DLQ。现在,我还有另一条消息M3等待被消耗。我想确保M3只在M2被成功消耗后才被处理。

根据FIFO队列的定义,它应该做一些类似于确保严格排序的事情。但是,我在AWS文档中找不到关于支持这一点的确切提及。有人能帮我吗?

来自同一FIFO源队列组的SQS消息不会被阻塞,直到驻留在DLQ中的失败消息被重新提交到源队列并由消费者处理。

本文档中有一个要点提示了这一点:https://aws.amazon.com/de/blogs/compute/using-amazon-sqs-dead-letter-queues-to-control-message-failure/

不要如果您不想打乱消息或操作的确切顺序,请使用带有FIFO队列的死信队列。例如,不要在视频编辑套件的编辑决策列表(EDL)中使用带有指令的死信队列,因为更改编辑顺序会更改后续编辑的上下文。

它明确地说DLQ与FIFO源队列可以打破排序。

因此,即使使用FIFO队列,一旦失败的消息在DQL中结束,那么消费者将收到来自同一组的稍后消息。

最新更新