You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ActiveMQ Artemis配置双连接路由器至不同集群遇ROUND_ROBIN重复ID报错求助

ActiveMQ Artemis 连接路由器配置问题

问题背景

使用ActiveMQ Artemis 2.35.0版本,尝试配置一个Broker包含两个连接路由器,分别指向不同集群,且均采用ROUND_ROBIN策略。启动Broker时出现以下错误:

AMQ214019: Invalid configuration

Caused by: org.xml.sax.SAXParseException; cvc-id.2: There are multiple occurrences of ID value 'ROUND_ROBIN'.

将策略名称改为非重复值后,Broker可正常启动。相关配置片段如下:

<acceptors>
   <acceptor name="artemis-dsv">tcp://0.0.0.0:61616?router=evenly-balance;tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;amqpMinLargeMessageSize=102400;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE;useEpoll=true;amqpCredits=1000;amqpLowCredits=300;amqpDuplicateDetection=true;supportAdvisory=false;suppressInternalManagementObjects=false</acceptor>

   <acceptor name="artemis-hmg">tcp://0.0.0.0:62626?router=router-hmg;tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;amqpMinLargeMessageSize=102400;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE;useEpoll=true;amqpCredits=1000;amqpLowCredits=300;amqpDuplicateDetection=true;supportAdvisory=false;suppressInternalManagementObjects=false</acceptor>
</acceptors>
<connection-routers>
   <connection-router name="evenly-balance">
      <key-type>CLIENT_ID</key-type>
      <key-filter>^.{3}</key-filter>
      <policy name="ROUND_ROBIN"/>
      <pool>
         <username>xxx</username>
         <password>yyy</password>
         <static-connectors>
            <connector-ref>server1</connector-ref>
            <connector-ref>server2</connector-ref>
         </static-connectors>
      </pool>
   </connection-router>
   <connection-router name="router-hmg">
      <key-type>CLIENT_ID</key-type>
      <key-filter>^.{3}</key-filter>
      <policy name="ROUND_ROBIN"/>
      <pool>
         <username>zzz</username>
         <password>ccc</password>
         <static-connectors>
            <connector-ref>server3</connector-ref>
            <connector-ref>server4</connector-ref>
         </static-connectors>
      </pool>
   </connection-router>
</connection-routers>

核心疑问:是否可以使用一个连接路由器Broker对接不同集群?


解答

错误原因

报错cvc-id.2是因为XML Schema将<policy>元素的name属性定义为全局唯一ID,两个连接路由器均使用name="ROUND_ROBIN"违反了ID唯一性约束,导致配置校验失败。

核心结论

完全可以用一个ActiveMQ Artemis Broker对接不同集群,只需调整配置解决策略名称重复问题,以下是两种可行方案:

方案1:定义全局共享策略

单独定义一个全局的ROUND_ROBIN策略,然后在两个连接路由器中引用该策略,避免重复ID:

<policies>
   <policy name="ROUND_ROBIN" type="ROUND_ROBIN"/>
</policies>

<connection-routers>
   <connection-router name="evenly-balance">
      <key-type>CLIENT_ID</key-type>
      <key-filter>^.{3}</key-filter>
      <policy-ref name="ROUND_ROBIN"/>
      <pool>
         <username>xxx</username>
         <password>yyy</password>
         <static-connectors>
            <connector-ref>server1</connector-ref>
            <connector-ref>server2</connector-ref>
         </static-connectors>
      </pool>
   </connection-router>
   <connection-router name="router-hmg">
      <key-type>CLIENT_ID</key-type>
      <key-filter>^.{3}</key-filter>
      <policy-ref name="ROUND_ROBIN"/>
      <pool>
         <username>zzz</username>
         <password>ccc</password>
         <static-connectors>
            <connector-ref>server3</connector-ref>
            <connector-ref>server4</connector-ref>
         </static-connectors>
      </pool>
   </connection-router>
</connection-routers>

方案2:给内嵌策略设置唯一名称并指定类型

保留每个连接路由器内的内嵌策略,给它们设置不同的name作为唯一ID,同时通过type属性指定ROUND_ROBIN策略类型:

<connection-routers>
   <connection-router name="evenly-balance">
      <key-type>CLIENT_ID</key-type>
      <key-filter>^.{3}</key-filter>
      <policy name="round-robin-dsv" type="ROUND_ROBIN"/>
      <pool>
         <username>xxx</username>
         <password>yyy</password>
         <static-connectors>
            <connector-ref>server1</connector-ref>
            <connector-ref>server2</connector-ref>
         </static-connectors>
      </pool>
   </connection-router>
   <connection-router name="router-hmg">
      <key-type>CLIENT_ID</key-type>
      <key-filter>^.{3}</key-filter>
      <policy name="round-robin-hmg" type="ROUND_ROBIN"/>
      <pool>
         <username>zzz</username>
         <password>ccc</password>
         <static-connectors>
            <connector-ref>server3</connector-ref>
            <connector-ref>server4</connector-ref>
         </static-connectors>
      </pool>
   </connection-router>
</connection-routers>

两种方案均可让Broker正常启动,同时实现两个连接路由器分别对接不同集群并使用ROUND_ROBIN负载均衡策略。


内容的提问来源于stack exchange,提问作者Felipe Pereira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 17:20:00