# 使用docker 搭建activemq集群
# 一、 获取镜像
# 1. 查找已有的mq docker镜像
TIP
自己搭建失败了。。这里使用别人的
# 命令行输入
docker search activemq
# 结果
# 由于5.14不是最新版,这里我们选用第二个
# 二、 搭建集群前的准备工作
# 1. 试运行一下
# 命令行输入
docker run -d rmohr/activemq
# 运行后会返回生成的容器ID
# 2. 进入容器查看mq根目录所在
docker exec -ti 3921feaef9d69c241c9bb14d7aa3296eb1e127be9f7ebd43e3db32809037a56f /bin/bash
pwd
# 可以看到mq根目录的路径为 /opt/apache-activemq-5.15.6
# 3. 复制容器根目录文件到宿主机上并改名为activemq(挂载用)
docker cp 3921feaef9d69c241c9bb14d7aa3296eb1e127be9f7ebd43e3db32809037a56f:/opt/apache-activemq-5.15.6 ./
退出容器
ctrl + p + q
mv apache-activemq-5.15.6 activemq
# 三、编写 docker-compose.yml 文件
# 1. 在当前目录新建一个 docker-compose.yml 文件
touch docker-compose.yml
# 2. 加入一下代码
version: "3"
services:
activemq1:
image: rmohr/activemq
ports:
- "8161:8161"
- "61616:61616"
volumes:
- ./activemq/conf:/opt/apache-activemq-5.15.6/conf
activemq2:
image: rmohr/activemq
ports:
- "8162:8161"
- "61617:61616"
volumes:
- ./activemq/conf:/opt/apache-activemq-5.15.6/conf
# 3. 跑起来(要在docker-compose.yml所在的目录)
docker-compose up -d
# 访问本机ip的 8161 或者 8162 端口
这样子雏形就搭好了
# 四、添加密码安全认证
# 主要修改以下文件
# 1.在 users.properties 中增加用户名密码(用于61616端口的认证)
# 2. 在 ***login.config***修改登录插件配置
activemq-domain {
org.apache.activemq.jaas.PropertiesLoginModule required debug=true
org.apache.activemq.jaas.properties.user="users.properties"
org.apache.activemq.jaas.properties.group="groups.properties";
};
TIP
配置键名需要与 activemq.xml 里插件配置的参数一致
# 3. 在 activemq.xml 增加登录插件
# 在 标签内加入如下代码
<plugins>
<jaasAuthenticationPlugin configuration="activemq-domain"/>
</plugins>
# 4. 修改 jetty-realm.properties (这里用于 8161 端口的网页登录)
TIP
格式: 用户名:密码,权限
# 重启容器进入管理端的密码就会变成你修改后的密码了,同时后台程序连接mq也需要密码认证
# 五、 配置死信重发插件及死信队列单独命名
# 1. 死信重发
在 activemq.xml <broker>
标签下 <plugins>
标签内添加如下代码
<redeliveryPlugin fallbackToDeadLetter="true" sendToDlqIfMaxRetriesExceeded="true">
<redeliveryPolicyMap>
<redeliveryPolicyMap>
<redeliveryPolicyEntries>
<!-- a destination specific policy -->
<redeliveryPolicy queue="SpecialQueue"
maximumRedeliveries="4"
redeliveryDelay="10000"/>
</redeliveryPolicyEntries>
<defaultEntry>
<!-- the fallback policy for all other destinations -->
<redeliveryPolicy maximumRedeliveries="4"
initialRedeliveryDelay="5000"
redeliveryDelay="10000"/>
</defaultEntry>
</redeliveryPolicyMap>
</redeliveryPolicyMap>
</redeliveryPlugin>
TIP
仅5.15以后的版本可用
# 2. 死信队列单独命名
# 在 activemq.xml <broker>
标签下 <destinationPolicy> <policyMap> <policyEntries>
标签内添加如下代码
<policyEntry queue=">">
<deadLetterStrategy>
<individualDeadLetterStrategy queuePrefix="DLQ." useQueueForQueueMessages="true" processNonPersistent="true"/>
</deadLetterStrategy>
</policyEntry>
参考文档 http://activemq.apache.org/message-redelivery-and-dlq-handling.html (opens new window)
# 六、配置集群
# 在 activemq.xml <broker>
标签下 添加如下代码
<networkConnectors>
<networkConnector name="local_network" uri="static:(tcp://192.168.2.139:61616,tcp://192.168.2.139:61617)"
duplex="true" userName="admin"
password="admin"></networkConnector>
</networkConnectors>
TIP
192.168.2.139 是本机IP,配置服务器时记得换成公网IP userName="admin" password="admin" 顾名思义,账号密码