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

如何配置WildFly 10中ActiveMQ子系统的共享存储与复制功能

别发愁啦,我帮你梳理清楚WildFly 10上ActiveMQ子系统共享存储+复制的配置步骤,刚好适配你两台虚拟机的测试场景,一步步来肯定能搞定👇

一、先搞定前提准备
  • 两台虚拟机都安装好WildFly 10,版本保持完全一致
  • 准备一个共享存储(测试用NFS最方便,生产可用SAN),在两台机器上挂载同一个目录,比如/mnt/wildfly/shared-jms,并且确保WildFly进程对这个目录有读写权限
  • 两台机器网络互通,开放集群相关端口:54321(ActiveMQ节点通信)、45700(JGroups组播)、7600(JGroups TCP),管理端口9990可选,方便查看状态
二、修改standalone-ha-full.xml配置

找到WildFly安装目录下的standalone/configuration/standalone-ha-full.xml,两台机器都要做以下修改:

2.1 配置ActiveMQ服务器的共享存储与复制

找到<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">节点下的<server name="default">,替换为以下配置:

<server name="default">
    <!-- 开启共享存储模式 -->
    <shared-store>true</shared-store>
    <!-- 启用持久化,指定共享存储的各类数据目录 -->
    <persistence-enabled>true</persistence-enabled>
    <journal-directory>/mnt/wildfly/shared-jms/journal</journal-directory>
    <bindings-directory>/mnt/wildfly/shared-jms/bindings</bindings-directory>
    <large-messages-directory>/mnt/wildfly/shared-jms/large-messages</large-messages-directory>
    <paging-directory>/mnt/wildfly/shared-jms/paging</paging-directory>
    
    <!-- 配置集群复制 -->
    <cluster password="my-cluster-pass">
        <connector-ref connector-name="netty"/>
        <replication>true</replication>
        <discovery-group-ref discovery-group-name="default"/>
    </cluster>
    
    <!-- 保留原有其他配置,比如jms-queue、connection-factory等 -->
</server>

💡 注意:cluster password两台机器必须设为同一个值;共享目录路径要和你实际挂载的路径完全匹配。

2.2 配置集群节点自动发现

确保<discovery-group>配置正确,它用来让两台节点自动找到彼此:

<discovery-group name="default">
    <socket-binding>jgroups-mping</socket-binding>
    <refresh-timeout>10000</refresh-timeout>
</discovery-group>

这个配置用JGroups的MPING组播机制,默认组播地址是230.0.0.4,如果你的虚拟机在同一网段,无需修改;如果不在同一网段,可以换成TCPPING(需要手动指定节点IP),测试场景用MPING足够。

2.3 检查Socket Bindings

找到<socket-binding-group>节点,确保集群相关的socket配置存在:

<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
    <!-- 保留原有其他socket绑定,比如http、management等 -->
    <!-- JGroups集群通信相关 -->
    <socket-binding name="jgroups-mping" port="0" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45700"/>
    <socket-binding name="jgroups-tcp" port="7600"/>
    <!-- ActiveMQ节点间通信 -->
    <socket-binding name="netty" port="54321"/>
</socket-binding-group>

💡 如果第二台机器需要避免端口冲突,可以启动时加-Djboss.socket.binding.port-offset=100,这样所有端口都会自动加100。

2.4 调整本地连接器的Server ID

找到<in-vm-connector>和<in-vm-acceptor>的server-id,两台机器要设成不同值,比如第一台设0,第二台设1,避免本地VM通信冲突:

<connectors>
    <in-vm-connector name="in-vm" server-id="0"/> <!-- 第二台改成1 -->
    <!-- 其他连接器保留 -->
</connectors>
<acceptors>
    <in-vm-acceptor name="in-vm" server-id="0"/> <!-- 第二台改成1 -->
    <!-- 其他接收器保留 -->
</acceptors>
三、启动两台节点

第一台机器启动命令(绑定所有IP,方便另一台访问):

./bin/standalone.sh -c standalone-ha-full.xml -b 0.0.0.0 -bmanagement 0.0.0.0

第二台机器如果需要端口偏移,启动命令:

./bin/standalone.sh -c standalone-ha-full.xml -b 0.0.0.0 -bmanagement 0.0.0.0 -Djboss.socket.binding.port-offset=100

启动后查看控制台日志,出现类似Joined cluster [default]的信息,说明集群加入成功。

四、验证配置是否生效
  1. 测试消息高可用:发送一条消息到某个队列,关闭第一台节点,第二台节点应该能自动接管队列,正常消费这条消息
  2. 检查共享存储:查看/mnt/wildfly/shared-jms下的文件,两台节点都会读写这些文件,说明共享存储生效
  3. 查看集群状态:访问WildFly管理控制台(比如http://你的节点IP:9990),进入Messaging -> Servers -> default -> Cluster,能看到两个节点都在线

内容的提问来源于stack exchange,提问作者chris taylor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:16:42