【问题标题】:Queue declaration on all nodes in RabbitMQRabbitMQ中所有节点的队列声明
【发布时间】:2017-11-18 16:09:43
【问题描述】:

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

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

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

【问题讨论】:

    标签: rabbitmq spring-rabbit


    【解决方案1】:

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

    如果您想在所有节点上预先声明,您需要为每个节点创建一个连接工厂,并为每个连接工厂提供一个RabbitAdmin

    您还需要一些东西来打开每个连接(RabbitAdmins 将自己注册为连接侦听器)。

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

    您还可以有选择地声明元素。见Conditional Declaration

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多