ActiveMq伪集群设置

自己学习ActiveMq集群化的时候可以使用多台虚拟机模拟真实环境。也可以在单机上使用多个ActiveMq节点,也就是单机多实例的伪集群方式

  • 看一下目录结构,activemq-single是平时使用的单节点,activemq123就是用来构成集群的三个节点


    目录结构
  • 通过levelDB+zookeeper的方式实现集群化
  • 每个ActiveMq节点的brokerName必须相同,否则无法加入集群
  • directory表示ActiveMq使用levelDB将消息持久化的路径
  • replicas表示的是集群中有几个ActiveMq节点
  • bind表示各个节点的通信地址,端口设为0表示使用动态端口,如果写死的话要保证每个节点不同的端口(因为是伪集群)
  • zkAddress表示使用的zk地址,使用三个表示使用的时zk集群,也可以只用一个zk
  • zkPath表示节点信息在zk中的存储路径
  • hostname表示集群端口的主机名,节点启动后会访问hostname:port,因为这里是伪集群,所以都是localhost
  • openwire的端口要保证不一样,这个是消息端口
  • 修改后的activemq.xml如下,省略了没有修改的部分
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
     <!--省略-->
    <persistenceAdapter>
        <!-- 不使用kahadb,使用levelDB+zookeeper构建集群-->
        <!--<kahaDB directory="${activemq.data}/kahadb"/>-->
        <replicatedLevelDB
                directory="${activemq.data}/leveldb"
                replicas="3"
                bind="tcp://0.0.0.0:0"
                zkAddress="127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183"
                zkPath="/activemq/leveldb-stores"
                hostname="localhost"
                />
    </persistenceAdapter>
    
    <transportConnectors>
        <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
        <transportConnector name="openwire"
                            uri="tcp://0.0.0.0:60001?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
        <transportConnector name="amqp"
                            uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
        <transportConnector name="stomp"
                            uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
        <transportConnector name="mqtt"
                            uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
        <transportConnector name="ws"
                            uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    </transportConnectors>

    <plugins>
        <simpleAuthenticationPlugin>
            <users>
                <authenticationUser username="admin" password="admin" groups="users,admins"/>
                <!--<authenticationUser username="user" password="password" groups="users"/>-->
                <!--<authenticationUser username="guest" password="password" groups="guests"/>-->
            </users>
        </simpleAuthenticationPlugin>
    </plugins>
    <!--省略-->
</broker>
  • 还需要修改每个节点下jetty.xml中的端口,这个端口是ActiveMq管控台的端口,需要保证端口不冲突,只有master节点的管控台可以使用
  • 在程序中的brokerUrl为failover:(tcp://127.0.0.1:60001,tcp://127.0.0.1:60002,tcp://127.0.0.1:60003)?randomize=false
  • 如果需要两套ActiveMq集群一起提供服务(负载均衡),需要在persistenceAdapter标签的上面加上另一套集群的地址
<networkConnectors>
    <networkConnector uri="static:(tcp://xxx:xxx,tcp://xxx:xxx,tcp://xxx:xxx)" duplex="false"/>
</networkConnectors>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容