docker 建立activemq集群

docker 建立activemq集群

因为对activemq的queue和topic有所疑问,所以想使用docker建立activemq的集群。

环境上使用ubuntu系统进行搭建。

安装docker部分
  1. 执行安装命令: wget -qO- https://get.docker.com/ | sh

  2. 启动服务: sudo service docker start

拉取activemq镜像
  1. 使用阿里云的镜像 docker pull registry.cn-hangzhou.aliyuncs.com/daydayup/activemq
搭建集群并验证

activemq这里采用三台的模式进行搭建。

主机IP角色职责
A192.168.1.2集群消费者
B192.168.1.3master生产者、消费者
C192.168.1.4slave生产者(预备)、消费者

这里说一下我理解的activemq的集群原理。
1. master和slave共享存储
2. master和cluster、slave和cluster消息同步, 使用的是网络连接器。

再说一下docker集群的搭建方法:

  1. 使用dockerfile和docker-compose命令进行搭建
  2. 使用commit镜像

我们这里使用比较简单的手动方法,将主机的文件映射到docker容器里

  1. 首先启动activemq docker run -it -d registry.cn-hangzhou.aliyuncs.com/daydayup/activemq
  2. 得到容器id,进入容器 docker -exec -it 容器id /bin/bash
  3. 讲容器里activemq的配置文件拿出来. docker cp xxx:/opt/apache-activemq-5.13.3/conf/activemq.xml /myConfig/activemq/activemq-cluster-a.xml
  4. 将配置文件增加两份,分别为active-master-b.xmlactive-slave-c.xml
  5. 修改配置

    active-cluster-a.xml

         <transportConnectors>
            <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
            <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
           <!-- <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?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>
    
          <!-- 配置网络代理,cluster 节点需要与 master 跟 slave 进行穿透 -->
        <networkConnectors>
                <networkConnector uri="static:(tcp://192.168.1.3:61617,tcp://192.168.1.4:61618)" duplex="true" />
        </networkConnectors>

    active-master-b.xml

    <transportConnectors>
            <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
            <transportConnector name="openwire" uri="tcp://0.0.0.0:61617?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
           <!-- <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?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>
    
          <!-- 配置网络代理,cluster 节点需要与 master 跟 slave 进行穿透 -->
        <networkConnectors>
                <networkConnector uri="static:(tcp://192.168.1.2:61616)" duplex="true" />
        </networkConnectors>

    active-slave-c.xml

    <transportConnectors>
            <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
            <transportConnector name="openwire" uri="tcp://0.0.0.0:61618?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
           <!-- <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?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>
    
          <!-- 配置网络代理,cluster 节点需要与 master 跟 slave 进行穿透 -->
        <networkConnectors>
                <networkConnector uri="static:(tcp://192.168.1.2:61616)" duplex="true" />
        </networkConnectors>
  6. 创建activemq的共享目录 /usr/share/activemq/kahadb

  7. 创建docker网络进行ip规划.

    docker network create --subnet=192.168.1.0/16 mynet123
  8. 启动三个容器

    docker run -it -d -p 61617:61616 -p 8171:8161 --hostname=master --network="mynet123" --ip="192.168.1.2" -v /myConfig/activemq/activemq-master-b.xml:/opt/apache-activemq-5.13.3/conf/activemq.xml -v /usr/share/activemq/kahadb:/opt/apache-activemq-5.13.3/data/kahadb registry.cn-hangzhou.aliyuncs.com/daydayup/activemq
    
    docker run -it -d -p 61616:61616 -p 8161:8161 --hostname=cluster --network="mynet123" --ip="192.168.1.3" -v /myConfig/activemq/activemq-clusters-a.xml:/opt/apache-activemq-5.13.3/conf/activemq.xml registry.cn-hangzhou.aliyuncs.com/daydayup/activemq
    
    docker run -it -d -p 61618:61616 -p 8181:8161 --hostname=slave --network="mynet123" --ip="192.168.1.4" -v /myConfig/activemq/activemq-slave-c.xml:/opt/apache-activemq-5.13.3/conf/activemq.xml -v /usr/share/activemq/kahadb:/opt/apache-activemq-5.13.3/data/kahadb registry.cn-hangzhou.aliyuncs.com/daydayup/activemq 
  9. 然后就可以通过nestat -an |grep 61616这样的命令来检查,我这里搭建的控制台的地址提示是0.0.0.0:8161, 0.0.0.0:8171这样进行访问

  10. 使用idea编写java客户端进行生产和消费。

notes:
  1. 在设置activemq的静态网络时候两个之间不能有空格,否则会报错。(tcp://192.168.1.3:61617,tcp://192.168.1.4:61618)
  2. 在出现容器起来马上就退出了是因为activemq没有启动成功。
  3. 查错可以使用 docker logs -f 容器id进行查看日志。查看所有容器的命令是docker ps -a
  4. 参见的博文
留下来的问题:
  1. 不了解broker的具体作用
  2. docker网络需要再了解
  3. 容器的hostname怎么设置
  4. 使用dockerfile和docker-compose进行搭建集群
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Docker搭建ActiveMQ集群,你可以按照以下步骤进行操作: 1. 创建Dockerfile:首先,你需要创建一个Dockerfile来定义ActiveMQ容器的构建规则。在Dockerfile中,你可以指定基础镜像、安装必要的软件和配置ActiveMQ。 2. 使用docker-compose进行搭建:docker-compose是一个用于定义和运行多个容器应用的工具。你可以使用docker-compose.yml文件定义ActiveMQ集群的配置,包括容器的数量、网络设置和映射端口等。 3. 使用commit镜像:根据引用中的建议,使用commit镜像来保存配置和修改。当你对容器进行修改后,可以使用docker commit命令将修改后的容器保存为新的镜像。 4. 设置静态网络:根据引用中的提示,确保在设置ActiveMQ的静态网络时,两个节点之间不能有空格,否则会报错。你可以在docker-compose.yml文件中指定容器之间的通信方式,如tcp://192.168.1.3:61617,tcp://192.168.1.4:61618。 5. 启动容器并查看日志:使用docker-compose命令启动容器,然后通过docker ps命令查看所有容器的状态。如果发现容器启动后马上退出,你可以使用docker logs -f 容器ID命令查看容器的日志,以便进行故障排查。 需要注意的是,在搭建ActiveMQ集群之前,你需要对broker的具体作用有一定的了解,以便正确配置和管理集群。此外,你还可以使用Idea编写Java客户端来进行生产和消费消息,以满足具体的业务需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [docker 建立activemq集群](https://blog.csdn.net/kang389110772/article/details/78270875)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值