两个AWS SQS FIFO队列消费者何时可处理同消息组ID消息?
AWS SQS FIFO队列同消息组ID的多消费者处理规则
核心结论
只要特定消息组ID下存在任何处于不可见状态的消息,其他消费者就无法获取该消息组ID的任何消息——不管是该组的部分消息还是全部消息处于不可见状态,这个规则都会生效。
针对你的场景的具体说明
以你提到的例子为例:队列中有10000条消息组ID完全相同的消息,两个消费者A和B启动后:
- 消费者A调用
ReceiveMessage拉取最多10条消息,这10条消息会进入不可见状态(时长由队列的VisibilityTimeout配置决定)。 - 在这10条消息处于不可见状态的期间,消费者B调用
ReceiveMessage时,会返回空结果,完全无法获取该消息组ID的任何消息。 - 只有当消费者A处理完这10条消息(比如调用
DeleteMessage删除它们,或者不可见超时后消息回到队列),消费者B才有可能拉取到该消息组ID的下一批消息。
AWS官方文档依据
AWS SQS官方文档关于FIFO队列的消息组处理逻辑明确指出:
同一消息组ID的消息会被严格按顺序处理。当某个消息组ID下有消息处于不可见状态时,SQS会暂停向任何消费者分发该消息组ID的后续消息,直到所有不可见的消息要么被删除,要么超时回到队列。
开发者实验验证
大量开发者的实际测试结果和你描述的场景一致:当同消息组的一批消息被一个消费者拉取进入不可见状态后,其他消费者无法获取该组的任何消息,必须等待当前不可见的消息处理完成,才能继续消费同组的后续消息。这一行为完全符合SQS FIFO队列保证消息组内顺序性的设计目标。
内容的提问来源于stack exchange,提问作者rlandster
相关产品推荐
相关产品推荐

