消费者在ActiveMQ Artemis集群中连接了错误的broker

问题描述 投票:0回答:1

我创建了一个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。

activemq-artemis
1个回答
0
投票

首先要注意的是,

connector-ref
上的
cluster-connection
元素的顺序与连接在集群中的分布方式无关。

唯一决定连接如何在默认配置的集群中分布的因素是客户端本身,这主要由以下因素控制:

为客户端指定的连接 URL。例如,是只列出一个经纪人还是多个经纪人?
  • 客户端建立连接后,它会下载集群拓扑,并且默认情况下,它会使用该拓扑在同一
  • ConnectionFactory
  • 实例上进行后续连接尝试。可以通过在连接 URL 上设置
    useTopologyForLoadBalancing=false
    来禁用此行为。
  • 连接负载平衡策略
  • 确定如何处理拓扑中的条目以在同一ConnectionFactory实例上进行后续连接尝试。
    
    
  • 总而言之,集群的要点之一是,特定客户端连接到哪个节点
并不重要。如果您发现一个节点正在处理大部分连接,那么您最好简单地减小集群的大小(甚至减少到只有 1 个节点)或使用

连接路由器在节点之间更确定地路由连接。

© www.soinside.com 2019 - 2024. All rights reserved.