1

我对 RabbitMQ 如何处理以直接模式从交换机转发的持久消息感到有些困惑,这些消息位于已断开连接的队列中。

情况是这样的。

       -> Exclusive Queue -> Client 1
      /
Exch - 
      \
       -> Exclusive Queue -> Client 2

持久消息被发送到交换器,交换器将它们分发到独占队列。客户端 1 死于破坏其排他队列。

我的问题是,如果该队列上有消息,它们会丢失吗?还是他们对交易所不满?

或者这是一个坏主意?让每个客户端连接到一个队列会更好吗?(这需要有持久的消息和高吞吐量,所以不确定这是一个选项......)

4

1 回答 1

1

持久消息仅在队列中持久。实际上仅在持久队列中。这意味着如果 RabbitMQ 本身出于某种原因而崩溃。如果持久队列中有未使用的持久消息,它们将在 RabbitMQ 重新启​​动时与队列一起恢复。

所以这对你的问题没有帮助。您要做的是确保将自动删除设置设置为 false。您甚至不需要持久消息来完成这项工作。当不再有连接的消费者时,自动删除会删除队列。如果您的客户端很好地终止并正确删除了连接,那么如果您将其设置为 true(我相信这是默认设置),它也会自动删除队列。

将 autodelete 设置为 false 将意味着队列始终存在并且在声明后始终接收消息。因此,如果您的客户端死亡并且队列中仍有消息,则当客户端重新启动时它们仍然存在。

于 2013-01-12T13:01:02.893 回答