Wildfly 10中能否为连接JMS集群的JMS-Bridge配置故障转移?
可以为JMS-Bridge配置到JMS集群的故障转移,具体实现方式如下
结合你已有的套接字绑定和HTTP连接器配置,只需要在JMS-Slave的配置中补充高可用远程连接工厂并调整JMS-Bridge的引用即可实现故障转移。以下是详细步骤:
1. 确认现有HTTP连接器配置
首先确保你在messaging-activemq子系统中已经正确配置了两个HTTP连接器,关联到已有的出站套接字绑定:
<http-connector name="http-connector-1" socket-binding="remote-server-1" endpoint="http-acceptor"/> <http-connector name="http-connector-2" socket-binding="remote-server-2" endpoint="http-acceptor"/>
这里的endpoint="http-acceptor"需要和JMS-Master集群节点上配置的HTTP acceptor名称一致(默认就是http-acceptor,如果集群中修改过名称要对应调整)。
2. 创建静态连接器组
将两个HTTP连接器组合成一个集群连接器组,作为故障转移的候选节点池:
<static-connectors name="jms-cluster-connectors"> <connector-ref connector-name="http-connector-1"/> <connector-ref connector-name="http-connector-2"/> </static-connectors>
3. 配置高可用远程连接工厂
创建一个支持故障转移的远程连接工厂,关联上面的静态连接器组,并启用高可用参数:
<remote-connection-factory name="jms-cluster-connection-factory" entries="java:/jms/ClusterConnectionFactory" connectors="jms-cluster-connectors" ha="true" reconnect-attempts="-1" block-on-acknowledge="true"/>
关键参数说明:
ha="true":开启高可用模式,让连接工厂能够感知集群节点状态,自动触发故障转移reconnect-attempts="-1":设置为-1表示无限次重试连接,直到成功切换到可用节点block-on-acknowledge="true":确保消息确认后再进行故障转移,避免消息丢失(可根据你的QoS需求调整)
4. 调整JMS-Bridge配置
修改JMS-Bridge的源连接工厂,引用上面创建的高可用连接工厂:
<jms-bridge name="my-target-jms-bridge"> <source> <connection-factory name="java:/jms/ClusterConnectionFactory"/> <destination name="jms/topic/YourTargetTopic"/> <!-- 对应JMS-Master集群中的目标Topic --> </source> <target> <connection-factory name="java:/ConnectionFactory"/> <!-- JMS-Slave本地的连接工厂 --> <destination name="jms/topic/LocalForwardTopic"/> <!-- JMS-Slave本地的目标Topic --> </target> <quality-of-service>AT_MOST_ONCE</quality-of-service> <!-- 根据业务需求选择QoS级别 --> <failure-retry-interval>5000</failure-retry-interval> <!-- 连接失败后重试间隔(毫秒) --> <max-retries>-1</max-retries> <!-- 无限重试 --> <batch-size>10</batch-size> <batch-timeout>1000</batch-timeout> </jms-bridge>
额外注意事项
- 版本兼容性:确保JMS-Slave和JMS-Master集群使用的WildFly/ActiveMQ Artemis版本一致,避免协议不兼容导致的故障转移失败
- 持久化订阅:如果你的JMS-Bridge使用持久化订阅,要确保客户端ID唯一,并且集群中订阅状态已同步(JMS-Master作为HA集群,默认会同步订阅状态)
- 端口与防火墙:确认JMS-Slave能够访问JMS-Master集群两个节点的8080和18080端口,防火墙规则不要拦截这些流量
内容的提问来源于stack exchange,提问作者Stefan Großmann
相关产品推荐
相关产品推荐

