RabbitMQ in Action:在集群中排队

时间:2012-10-31 08:18:19

标签: erlang rabbitmq

  

不用担心:您可以让您的消费者重新连接到群集   重新创建队列,对吗?只有队列不是最初的   明显耐用。如果重新创建的队列标记为持久,   从另一个节点重新声明它们会让你变得丑陋404   NOT_FOUND错误。 这可以确保该队列中的消息   将故障节点还原到群集时,失败的节点不会消失。   将特定队列名称返回到群集的唯一方法是   实际上还原失败的节点。但如果您的消费者尝试排队   重新创造不再持久,重新开始将会成功   你已准备好重新绑定它们并保持卡车运输。

在作者说,持久队列不能重新申报因为没有丢失的数据,如何理解这一点?

1 个答案:

答案 0 :(得分:1)

问题在于RabbitMQ保留已发布消息的位置。如果在节点A中声明队列,则队列消息将存在于该节点中。复制的是队列元数据,即队列属性,但不是消息。因此,如果节点A死亡,那么在该节点中,您将获得发布到该队列的消息。

所以,现在让我们转到节点B并重新声明该队列,也就像在节点A中那样持久。如果允许该过程,那么您将丢失来自节点B的所有消息,因为经纪人会认为队列存在于节点B中。