代理如何确保消息仅被一个消费者消费?

时间:2021-01-27 16:05:58

标签: rabbitmq

我有一个队列,有两个消费者 c1 和 c2。我的两个消费者正在运行。当消息发布到队列时,JMS 代理(RabbitMQ)如何确保该消息仅被一个消费者使用?

1 个答案:

答案 0 :(得分:0)

现有的消息系统(RabbitMQ/Kafka/Kinesis/SQS)无法保证消息消费,但可以保证消息传递。

但是,单个消费者的消息消费可以在消费者代码中完成,并向RabbitMQ肯定地确认消息是由消费者处理的。如果在处理过程中出现验证错误/外部 API 调用错误或消费者退出并出现未知错误,RabbitMQ 会重新传递带有重新传递标志的消息,在这种情况下,消费者代码应针对分布式缓存/数据库检查较早的消息处理,然后采取进一步行动。这样可以保证消息消费一次。所有消息系统都会在各种情况下重新传递消息,因此建议对重复处理进行编码。

在您的情况下的单个活动消费者场景中,RabbitMQ 将消息重新传递给当前活动的消费者,尽管您可能有多个处于待机模式的消费者正在运行。