RabbitMQ中所有节点上的队列声明

时间:2017-06-16 02:20:29

标签: rabbitmq spring-rabbit spring-rabbitmq

我有一个Rabbitmq群集设置(没有HA)。我的消费者是spring应用程序,它提供了一个开箱即用的故障转移机制,它连接到下一个可用节点。

由于队列没有镜像,如果我在前面声明队列并且第一个节点发生故障时,可以建立到第二个节点的连接。这有意义吗?

另一个问题,假设我在Rabbitmq集群之上有一个负载平衡。我的应用程序使用负载平衡连接。是否会在所有节点上声明队列,或者是否会根据LB的路由策略在节点上声明队列。

1 个答案:

答案 0 :(得分:0)

对于第一种情况,是的,在建立连接时,将在故障转移代理实例上声明队列。

如果要在所有节点上预先声明,则每个节点都需要一个连接工厂,每个连接工厂需要一个RabbitAdmin

您还需要一些能够在每个连接上打开连接(RabbitAdmin s自己注册为连接侦听器。)

您可以通过添加实现SmartLifecycle的bean并在每个连接工厂调用createConnection()来实现。

您还可以选择性地声明元素。请参阅Conditional Declaration

  

默认情况下,所有队列,交换和绑定都由应用程序上下文中的所有RabbitAdmin实例(具有auto-startup="true")声明。

     

从1.2版本开始,可以有条件地声明这些元素。当应用程序连接到多个代理并且需要指定应声明特定元素的代理时,这尤其有用。