AWS FIFO SQS:当消息陷入 DLQ 时,SQS 如何维护组中的排序?

问题描述 投票:0回答:1

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

SQS 是否确保如果属于特定组的消息位于 DLQ 中,则在删除 DLQ 消息或重新驱动回主队列之前,消费者看不到来自该组的消息?

例如,可以依次收到以下三个消息:

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

我的轮询器成功消耗了 M1,但无法处理 M2。它会尝试直到 maxReceive 计数耗尽并且消息由 SQS 推送到 DLQ。现在,我还有另一条消息M3等待被消费。我想确保 M3 仅在 M2 成功消费后才得到处理。

根据 FIFO 队列的定义,它应该做类似确保严格排序的事情。但是,我无法在 AWS 文档中找到对此支持的确切提及。有人可以帮我吗?

amazon-web-services amazon-sqs dead-letter aws-sqs-fifo dlq
1个回答
4
投票

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

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

如果您不想破坏消息或操作的确切顺序,

不要将死信队列与 FIFO 队列一起使用。例如,不要将死信队列与视频编辑套件的编辑决策列表 (EDL) 中的指令一起使用,其中更改编辑顺序会更改后续编辑的上下文。

它明确表示,将 DLQ 与 FIFO 源队列一起使用可以打破排序。

因此,即使使用 FIFO 队列,一旦失败的消息最终进入 DLQ,那么消费者将收到来自同一组的后续消息。

© www.soinside.com 2019 - 2024. All rights reserved.