ActiveMq伪集群设置

作者: 江江的大猪 | 来源:发表于2018-02-12 15:12 被阅读46次

    自己学习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>
    

    相关文章

      网友评论

        本文标题:ActiveMq伪集群设置

        本文链接:https://www.haomeiwen.com/subject/wnnrtftx.html