ActiveMQ Artemis联邦仅执行轮询而非全网格的原因排查
问题原因与解决方案
原因分析
你当前的联邦配置定义了两个独立的<upstream>节点,每个节点对应一个单独的Broker连接器。在ActiveMQ Artemis的联邦机制中,每个<upstream>被视为一个独立的目标实例,默认会对多个上游采用轮询负载均衡策略——即每条消息只会发送到其中一个上游Broker,然后在多个上游间轮流切换,而非将同一条消息复制分发到所有上游。
正确配置方案
要实现消息向所有上游Broker分发,需要将多个连接器合并到同一个<upstream>节点中,让Artemis将该上游下的所有连接器视为一个需要广播消息的目标组。同时,针对主题类型的地址,确保联邦策略采用广播模式(主题默认支持广播,显式配置更稳妥)。
修改后的联邦配置示例:
<federations> <federation name="federated-jms"> <upstream name="kit-group" message-load-balancing="BROADCAST"> <static-connectors> <connector-ref>kit1-connector1</connector-ref> <connector-ref>kit2-connector1</connector-ref> </static-connectors> <policy ref="address-federation-policy" /> </upstream> <policy-set name="address-federation-policy"> <policy ref="federation-addresses" /> </policy-set> <address-policy name="federation-addresses" max-hops="1"> <include address-match="jms.topic.federated.#" /> </address-policy> </federation> </federations>
关键说明
message-load-balancing="BROADCAST":显式指定将消息广播到该上游下的所有连接器,确保同一条消息会被发送到所有目标Broker。- 合并连接器到同一
<upstream>:让Artemis识别这是一个需要全部分发的目标集群,而非多个独立的轮询节点。
内容的提问来源于stack exchange,提问作者IT_User
相关产品推荐
相关产品推荐

