2017-06-16 94 views
0

我有一个Rabbitmq集群设置(没有HA)。我的客户是Spring应用程序,它提供了一个开箱即用的故障转移机制,它连接到下一个可用节点。在RabbitMQ中的所有节点上的队列声明

由于队列没有镜像,因此如果我预先声明队列,并且当第一个节点关闭时,连接将建立到第二个节点,那么是否可以。这有意义吗?

另一个问题,可以说我有一个负载平衡顶部的Rabbitmq群集。我的应用程序使用负载平衡连接。将队列在所有节点上声明还是将根据LB的路由策略在节点上声明?

回答

0

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

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

您还需要使每个连接打开(RabbitAdmin s注册自己作为连接侦听器)。

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

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

默认情况下,所有的队列,交流,并绑定在应用环境中的所有RabbitAdmin情况下(有auto-startup="true")声明。

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