docker 安装 rocketmq-mqtt
- rocketmq版本4.9.3 以上
- rocketmq-mqtt版本:latest
rocketmq安装
1.下载镜像
# rocketmq镜像
docker pull apache/rocketmq:5.1.4
# rocketmq dashboard 镜像
docker pull apacherocketmq/rocketmq-dashboard:latest
2.为RocketMQ容器创建一个网络,以便容器之间可以相互通信。
docker network create rocketmq-net
3.创建nameserver挂载目录
mkdir -p /app/rocketmq/namesrv/logs /app/rocketmq/namesrv/store
4.创建broker挂载目录
mkdir -p /app/rocketmq/broker/logs /app/rocketmq/broker/store
5.创建borke配置文件目录
mkdir -p /app/rocketmq/conf
6.编辑配置文件
vim /app/rocketmq/conf/broker.conf
# 集群名称
brokerClusterName = DefaultCluster
# 节点名称
brokerName = broker-a
# broker id节点ID, 0 表示 master, 其他的正整数表示 slave,不能小于0
brokerId = 0
# Broker服务地址 内部使用填内网ip,如果是需要给外部使用填公网ip
brokerIP1 = 192.168.19.91
# Broker角色
brokerRole = ASYNC_MASTER
# 刷盘方式
flushDiskType = ASYNC_FLUSH
# 在每天的什么时间删除已经超过文件保留时间的 commit log,默认值04
deleteWhen = 04
# 以小时计算的文件保留时间 默认值72小时
fileReservedTime = 72
# 是否允许Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
7.运行nameserver 容器
docker run -d --privileged=true \
--restart=always --name rocketmq-namesrv --network rocketmq-net -p 9876:9876 \
-v /app/rocketmq/namesrv/logs:/root/logs \
-v /app/rocketmq/namesrv/store:/root/store \
-e "MAX_POSSIBLE_HEAP=100000000" apache/rocketmq:5.1.4 sh mqnamesrv
注:sh mqnamesrv: 这是在容器中要运行的命令。它启动了RocketMQ的NameServer组件
8.创建borker 容器
docker run -d --restart=always \
--privileged=true \
--network rocketmq-net \
--name rocketmq-broker \
-p 10911:10911 -p 10909:10909 \
-v /app/rocketmq/broker/logs:/root/logs \
-v /app/rocketmq/broker/store:/root/store \
-v /app/rocketmq/conf/broker.conf:/home/rocketmq/rocketmq-5.1.4/conf/broker.conf \
apache/rocketmq:5.1.4 sh mqbroker \
-c /home/rocketmq/rocketmq-5.1.4/conf/broker.conf \
-n rocketmq-namesrv:9876
-d
: 表示以守护进程方式运行容器。--restart=always
: 设置容器在异常退出时自动重启。--network rocketmq-net
: 将容器连接到名为rocketmq-net
的网络。--name rocketmq_broker
: 指定容器的名称为rocketmq_broker
。-p 10911:10911 -p 10909:10909
: 将容器内部的 10911 和 10909 端口映射到宿主机的相同端口,用于与其他组件通信。apache/rocketmq:5.1.4 sh mqbroker
: 使用apache/rocketmq:5.1.4
镜像中的命令行工具sh
来执行mqbroker
命令。-c /opt/rocketmqinc/rocketmq/conf
: 指定配置文件的路径为/opt/rocketmqinc/rocketmq/conf
。-n rocketmq-namesrv:9876
: 指定 NameServer 的地址和端口为rocketmq-namesrv:9876
。
9.运行dashboard 容器实例
docker run -d \
--privileged=true \
--restart=always \
--name rocketmq-dashboard \
--network rocketmq-net \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=rocketmq-namesrv:9876" \
-p 8080:8080 \
-t apacherocketmq/rocketmq-dashboard:latest
10.检查容器是否启动
docker ps --filter "name=rock*" --format "{{.ID}}\t{{.Names}}\t{{.Status}}"
11.访问 dashboard ip:8080
部署说明
由于RocketMQ-MQTT项目依赖RocketMQ底层的多队列分发,RocketMQ从4.9.3版本开始支持这一特性,因此您需要确认RocketMQ的版本升级到4.9.3或更高版本,并且确保以下配置项已开启:
enableLmq = true
enableMultiDispatch = true
修改配置后需重启broker。
官网下载 rocketmq-mqtt 进行源码构建
# 1. git 下载
git clone https://github.com/apache/rocketmq-mqtt
# 2.编译
cd rocketmq-mqtt
mvn -Prelease-all -DskipTests clean install -U
rocketmq-mqtt 提取码 zlyhhttps://pan.baidu.com/s/1UDfIu5e13ewnqaxOc0ubUA?pwd=zlyh
配置rocketmq-mqtt
1.编译后的文件复制到任意目录下并解压
# 创建rocketmq-mqtt 工作目录
mkdir -p /app/rocketmq/rocketmq-mqtt
# 解压
unzip xxx.zip
# 查看配置文件
cd xxx/conf
2.修改rocketmq-mqtt中 connect.conf, meta.conf , service.conf
# 1.修改 connect.conf
mqttPort=1884 # 默认1883
enablePrometheus=true
# 2.修改meta.conf
# 当前节点所运行的服务器ip
selfAddress=192.168.19.91:25000
#所有成员节点地址
membersAddress=192.168.19.91:25000
# 修改service.conf
# 用户名
username=test
# 密钥
secretKey=test
#NameServer 服务地址
NAMESRV_ADDR=192.168.19.91:9876
# 通知事件重试主题
eventNotifyRetryTopic=eventNotifyRetryTopic
# 通知事件重试主题
clientRetryTopic=clientRetryTopic
#元地址 meta所有节点ip:port。与meta.config中的membersAddress相同
metaAddr=192.168.19.91:25000
3.进入rocketmq-broker 伪终端配置主题等信息
# 进入broker伪终端
docker exec -it rocketmq-broker /bin/bash
4 创建主题:包括 eventNotifyRetryTopic 和 clientRetryTopic。
语法: sh mqadmin updatetopic -c {cluster} -t {topic} -n {namesrv}
# 示例
sh mqadmin updatetopic -c DefaultCluster -t eventNotifyRetryTopic -n 192.168.19.91:9876
sh mqadmin updatetopic -c DefaultCluster -t clientRetryTopic -n 192.168.19.91:9876
sh mqadmin updatetopic -c DefaultCluster -t test-topic -n 192.168.19.91:9876
5 初始化元
- 配置网关节点列表
sh mqadmin updateKvConfig -s LMQ -k LMQ_CONNECT_NODES -v {ip1,ip2} -n {namesrv}
sh mqadmin updateKvConfig -s LMQ -k LMQ_CONNECT_NODES -v 192.168.19.91 -n 192.168.19.91:9876
- 配置一级主题列表
sh mqadmin updateKvConfig -s LMQ -k ALL_FIRST_TOPICS -v {topic1,topic2} -n {namesrv}
sh mqadmin updateKvConfig -s LMQ -k ALL_FIRST_TOPICS -v eventNotifyRetryTopic,clientRetryTopic,test-topic -n 192.168.19.91:9876
- 在每个一级主题下配置通配符列表
sh mqadmin updateKvConfig -s LMQ -k {topic} -v {topic/+} -n {namesrv}
sh mqadmin updateKvConfig -s LMQ -k eventNotifyRetryTopic -v eventNotifyRetryTopic/+ -n 192.168.19.91:9876
sh mqadmin updateKvConfig -s LMQ -k clientRetryTopic -v clientRetryTopic/+ -n 192.168.19.91:9876
sh mqadmin updateKvConfig -s LMQ -k test-topic -v test-topic/+ -n 192.168.19.91:9876
6.启动进程
cd bin
sh meta.sh start
sh mqtt.sh start
检查是否启动成功:
netstat -tunlp | grep 1884
netstat -tunlp | grep 25000
日志目录:
cd $HOME/logs
7.客户端测试及结果
rocketmq官方文档https://rocketmq.apache.org/zh/docs/quickStart/01quickstart
客户端工具连接 rocketmq-mqtt
Mqttx安装包https://pan.baidu.com/s/1WEQVRa4J55F5ZX_Jh7C2Pw?pwd=zlyh