SQS如何防止多个消费者同时接收同一条消息?

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

我了解 SQS 的运作方式。 “可见性超时”可防止多个使用者接收和处理来自 SQS 队列的同一消息。如果收到消息的消费者成功处理并删除该消息,则不会再收到该消息。但是,如果消费者无法处理和/或删除消息,则在可见性超时后该消息将再次可供使用。

但是...什么可以防止竞争条件导致两个消费者从 SQS 接收到相同的消息?

假设您有包含 Message1 的 SQSQueue1,以及从队列中读取的 ConsumerA 和 ConsumerB。如果ConsumerA和ConsumerB同时轮询SQSQueue1,那么在消息变得“不可见”之前,什么阻止ConsumerA和ConsumerB同时接收Message1呢?我假设 AWS 必须按队列对读取请求进行排队?

amazon-web-services amazon-sqs
1个回答
0
投票

没有什么可以阻止它。这就是为什么 sqs 在其默认模式下是“至少一次”传递。如果可以的话,它会尽量不给出重复的项目,但没有任何保证。

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