主动MQ - 经纪人网络

时间:2011-08-12 12:07:41

标签: activemq

我已经使用拓扑配置了经纪人网络,如下所示。

  • 生产者(P1)连接到经纪人(B1)和生产者(P2)连接到经纪人(B2)
  • 经纪人(B1)和经纪人(B2)作为经纪人网络连接并且平衡了
  • 消费者(C1)连接经纪人(B1)和消费者(C2)连接经纪人(B2)

客户端配置为使用故障转移:

  • Consumer-1 =故障转移:tcp:// localhost:61616,tcp:// localhost:61615?randomize = false
  • Consumer-2 =故障转移:tcp:// localhost:61615,tcp:// localhost:61616?randomize = false

一旦Channel-2关闭,P2和C2就转移到Channel-1,这是故障转移所需的行为。

我想了解Chaneel-2回归时的行为? 我注意到只有Channel-1继续为所有人提供服务 即使在Channel-2恢复之后,连接也会失去通道之间的负载平衡。

我想知道一旦Channel-2恢复后是否可能,负载平衡将在各个通道和相应的Producer-2之间自动启动,消费者-2转移到通道2,从而实现完全负载平衡和完全故障转移?

我发现了一篇文章“将容错与负载平衡结合起来” 建议将http://fusesource.com/docs/broker/5.4/clustering/index.html用于组合Fault Tolerance和Load Balancing?

此致

-Amber

2 个答案:

答案 0 :(得分:4)

在两个代理上,您需要设置transportConnector以启用updateClusterClients和rebalanceClusterClients。

 <transportConnectors>
   <transportConnector name="tcp-connector" uri="tcp://192.168.0.23:61616" updateClusterClients="true" rebalanceClusterClients="true" /> 
 </<transportConnectors>

具体来说,您应该需要rebalanceClusterClients。从http://activemq.apache.org/failover-transport-reference.html的文档中可以看出:

  

如果为true,将要求连接的客户端在群集中重新平衡   新经纪人加入经纪人网络时的经纪人

您必须使用ActiveMQ 5.4或更高版本才能使用这些选项。

答案 1 :(得分:0)

作为对后续问题的回答: “有没有像文章中讨论的那样记录Broker URI的方法?”

为了显示哪个客户端连接到哪个代理, 修改客户端的Log4j配置如下:

<log4j:configuration debug="true"
                     xmlns:log4j="http://jakarta.apache.org/log4j/">

    ...

    <logger name="org.apache.activemq.transport.failover.FailoverTransport">
        <level value="debug"/>
    </logger>

    ...

</log4j:configuration>