只交付一次

Eri*_*ric 6 rabbitmq

有没有办法配置使用 RabbitMQ 交换/队列传递的消息的“仅一次”处理?基本上,我们有一个由集群中的 2 个节点组成的消费应用程序,这两个节点都将订阅 Rabbit 上的同一个队列,但是在给定时间只有这两个节点之一应该处理消息。我的第一个想法是,考虑到兔子使用“循环”消息传递,这可以开箱即用,但我们不能保证将来不会有其他消费者。最佳实践是为每个使用应用程序创建特定队列并使用默认的循环分配功能吗?

小智 1

队列的附加消费者将像现有消费者一样成为循环消息消费的一部分。路由到报价的每条消息都将准确地传递给一个消费者。

为每个消费应用程序创建独占队列将导致如何确保恰好一次语义的问题。这需要 RabbitMQ 将每条消息精确地路由到这些队列之一。为了实现这一点,交易所将以循环方式进行路由。这在 AMQP 中是不可能的。

使用单个队列并使用任意数量的工作线程来消费其中的消息。这将为您提供恰好一次的语义。

  • 请注意,如果消费者在发送确认之前死亡,或者在其他边缘情况下,消息总是可以重新传递。 (8认同)