交换RabbitMQ的持久消息持久性

时间:2013-01-11 17:57:10

标签: rabbitmq messaging message-queue

我对RabbitMQ如何处理从已经断开连接的队列中的直接模式的交换转发的持久消息感到困惑。

情况就是这样。

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

持久消息被发送到交换机,交换机将它们分配给独占队列。客户端1终止销毁其独占队列。

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

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

1 个答案:

答案 0 :(得分:1)

持久性消息仅在队列中持久存在。实际上只有在持久的队列中。这意味着,如果RabbitMQ本身因任何原因而失败。如果在持久队列中存在未使用的持久性消息,则在重新启动RabbitMQ时,它们将与队列一起恢复。

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

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