默认负载
场景说明
-
如下图,假设接收端 1、2、3 都订阅了队列TEST.FOO,发送端连接到 MQ 1 并发送 了 12 个消息到队列TEST.FOO。
-
默认情况下管道订阅是生效的,所以 MQ 1 有两个订阅。
-
来自接收端 1 和 MQ 2,然后将消息交替发送给接收端 1 和 MQ 2。
-
如果接收端 1 和 MQ 2 接收速度相同,将会各收到 6 个消息。
-
MQ 2 有 2 个消费者:接收端 2 和接收端 3,交替发送消息给它们,
-
如果接收端 2、接收端3 接收速度相同,将会各收到3 个消息。 最终接收端 1、接收端 2、接收端 3 收到消息为 6、3、3,
-
并不符合负载均衡原则,接收端1 处理了 2 倍的消息。
配置文件
- 使用kahadb数据库,注掉MySQL连接信息
- 在broker标签内添加brokerId,修改brokerName名字(保证唯一)
<broker xmlns="http://inforsuitemq.cvicse.com/schema/core" brokerName="broker1" brokerId="A" dataDirectory="${inforsuitemq.data}" useJmx="true">
3.添加networkConnectors标签,name为其他集群中broker标签内的brokerName值,uri为其他集群的地址.
<networkConnectors>
<!--默认负载 <networkConnector name="linkToBrokerB" uri="static:(tcp://127.0.0.1:8689)" networkTTL="3"/> -->
<networkConnector name="linkToBrokerB" uri="static:(tcp://127.0.0.1:8689)" networkTTL="3" conduitSubscriptions="true"/>
</networkConnectors>
conduitSubscriptions=“true”----->设置为负载均衡(默认为负载均衡)
场景使用
设置完xml配置后,先运行三个消费者在运行生产者。
负载均衡
在xml里networkConnectors设置conduitSubscriptions=“false” 。
- 概述
下图显示了禁止管道订阅后,队列消息如何分发给消费者。假设接收端 1、接收端 2、接收端 3 都订阅了队列 TEST.FOO,发送端连接到 MQ 1 并发送了 12 个消息到队列TEST.FOO。禁 止管道订阅后,MQ 1 可以看到 MQ 2 上的所有订阅和接收端 1 的订阅,然后交 替分发消息,假设消费者接收消息速度相同,接收端 1 将收到 4 个消息,MQ 2 将收到 8 个消息。MQ 2 有两个订阅,接收端 2、接收端 3,然后交替分发消息,假设 C2、C3 接收 端 2、接收端 3 速度相同,它们将各收到4 个消息。最终,接收端 1、接收端 2、接收端3 收到是消 息为 4、4、4,达到了负载均衡。
conduitSubscriptions="false" //设置为负载均衡