我创建了一个ActiveMQ Active集群,有四个节点:Master1、Master2、Slave1、Slave2。服务器A上的Master1监听端口是61616,Slave2监听端口是61626。服务器B上Master2监听端口是61626,Slave1监听端口是61616。当我的Spring Boot应用程序通过设置
spring.artemis.broker-url
启动153个会话来连接Master1时,我发现只有Master2 Web 控制台上有 131 个会话。有 22 个会话连接到 Master1。我预计所有会话都会连接到 Master2。消费者连接政策如何运作?
这是代理集群设置:
<cluster-connections>
<cluster-connection name="my-cluster">
<connector-ref>artemis</connector-ref>
<message-load-balancing>ON_DEMAND</message-load-balancing>
<max-hops>1</max-hops>
<static-connectors>
<connector-ref>Master1</connector-ref>
<connector-ref>Slave1</connector-ref>
<connector-ref>Slave2</connector-ref>
<connector-ref>Master2</connector-ref>
</static-connectors>
</cluster-connection>
</cluster-connections>
我尝试更改静态连接器中的连接器顺序或在
spring.artemis.broker-url
中设置connectionLoadBalancingPolicyClassName,但这些不起作用。当我停止 Master1 时,所有会话都正确连接到 Master2。
首先要注意的是,
connector-ref
上的cluster-connection
元素的顺序与连接在集群中的分布方式无关。
唯一决定连接如何在默认配置的集群中分布的因素是客户端本身,这主要由以下因素控制:
为客户端指定的连接 URL。例如,是只列出一个经纪人还是多个经纪人?ConnectionFactory
useTopologyForLoadBalancing=false
来禁用此行为。ConnectionFactory
实例上进行后续连接尝试。