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

RabbitMQ中所有节点上的队列声明,rabbitmq,spring-rabbit,Rabbitmq,Spring Rabbit,我有一个Rabbitmq集群设置(没有HA)。我的消费者是spring应用程序,它提供了一种现成的故障切换机制,可以连接到下一个可用节点 因为队列没有镜像,所以如果我提前声明队列,并且当第一个节点关闭时,可以建立到第二个节点的连接吗。这有意义吗 另一个问题是,假设我在Rabbitmq集群上有一个负载平衡。我的应用程序使用负载平衡进行连接。是在所有节点上声明队列,还是在LB基于路由策略的节点上声明队列。对于第一种情况,是的,当建立连接时,将在故障转移代理实例上声明队列 如果要在所有节点上预声明,则

我有一个Rabbitmq集群设置(没有HA)。我的消费者是spring应用程序,它提供了一种现成的故障切换机制,可以连接到下一个可用节点

因为队列没有镜像,所以如果我提前声明队列,并且当第一个节点关闭时,可以建立到第二个节点的连接吗。这有意义吗


另一个问题是,假设我在Rabbitmq集群上有一个负载平衡。我的应用程序使用负载平衡进行连接。是在所有节点上声明队列,还是在LB基于路由策略的节点上声明队列。

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

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

您还需要一些东西来在每个服务器上打开连接(RabbitAdmin将自己注册为连接侦听器)

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

您还可以有选择地声明元素。看

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

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