Rabbitmq高可用性队列没有消息复制

时间:2017-06-29 10:37:13

标签: rabbitmq

我将rabbitMQ代理作为一个集群在两个节点上运行。我观察到,如果已创建队列的节点发生故障,那么队列将无法在其他节点上使用。如果我尝试从其他节点发布消息,则会失败。即使我从群集中删除了故障节点(使用忘记群集命令)并尝试从其他节点发布消息,行为也是一样。

我不想启用队列镜像,原因很简单,因为它会复制消息,而这些消息将会成为网络间的额外负载。

RabbitMQ有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:-1)

您遇到的行为是rabbitmq的默认行为,它正是我应该发生的行为。您创建队列的节点现在成为生产者,如果此节点发生故障,那么任何可用的连接或队列或交换与之相关的根本不起作用。有两种方法可以解决此问题。

  • 一个选项是每个节点都有一个单独的队列,并且任何想要侦听来自特定节点的消息的节点都可以订阅该特定队列的交换。这似乎不是一个好主意,因为你需要为它管理很多事情。

  • 第二个选项是在发布之前始终声明一个队列,这样如果你的队列不可用,那么一个新队列将取而代之,订阅的所有节点都能够监听,任何生产者节点都能够发布该队列。此选项将解决节点关闭或节点不可用的问题。来自docs

  

在发送之前我们需要确保收件人队列存在。如果我们向不存在的位置发送消息,RabbitMQ将丢弃该消息。让我们创建一个将要传递消息的hello队列:

答案 1 :(得分:-1)

RabbitMQ允许您导入和导出定义。定义是包含所有代理对象(队列,交换,绑定,用户,虚拟主机,权限和参数)的json文件。它们不包括队列消息。

您可以导出拥有队列的节点的定义,并定期将其导入集群的从属节点。您必须为此任务启用管理插件。

此处提供更多信息:https://www.rabbitmq.com/management.html#configuration

相关问题