背景:去官网查看RocketMQ已经升级到5.0版本,想本地部署一套系统,验证一下官网SDK的使用。话不多说,直接上文件。
配置文件
DockerCompose.yml
version: "3.7"
services:
mqnamesrv:
image: apache/rocketmq:5.2.0
container_name: mqnamesrv
restart: always
ports:
- "9876:9876"
environment:
- "JAVA_OPTS=-Duser.home/opt"
command: sh mqnamesrv
mqbroker:
image: apache/rocketmq:5.2.0
container_name: mqbroker
restart: always
depends_on:
- mqnamesrv
ports:
- "10909:10909"
- "10911:10911"
- "8081:8081"
volumes:
- ./conf/broker.conf:/home/rocketmq/rocketmq-5.2.0/conf/broker.conf
command: sh mqbroker -n mqnamesrv:9876 --enable-proxy autoCreateTopicEnable=true -c /home/rocketmq/rocketmq-5.2.0/conf/broker.conf
mqconsole:
image: styletang/rocketmq-console-ng
container_name: mqconsole
restart: always
depends_on:
- mqnamesrv
- mqbroker
ports:
- "8098:8080"
environment:
- "JAVA_OPTS=-Drocketmq.namesrv.addr=mqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false"
networks:
default:
external: true
name: kong-net
注意事项:
1、几个容器要部署到一个桥接网络里,上面配置文件用的kong-net,注意不能用docker默认的bridge,bridge网络容器间不能通信
2、broker一定要对外暴露接口8081,否则本地发送消息的时候会一直提示链接失败。(这个问题卡了好久,github上也好多问这个问题的,在一个回答中发现才解决的)
Broker.conf
# 所属集群名称,如果节点较多可以配置多个
brokerClusterName = DefaultCluster
#broker名称,master 和 slave 使用相同的名称,表明他们的主从关系
brokerName = broker-a
#0表示 Master,大于 0 表示不同的 slave
brokerId = 0
#表示几点做消息删除动作,默认是凌晨4点
deleteWhen = 04
#在磁盘上保留消息的时长,单位是小时
fileReservedTime = 48
#有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示 Master 和 Slave 之间同步数据的机制;
brokerRole = ASYNC_MASTER
#刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH 表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功
状态,ASYNC_FLUSH 不需要;
flushDiskType = ASYNC_FLUSH
# 设置 broker 节点所在服务器的 ip 地址、物理 ip,不能用127.0.0.1、localhost、docker内网ip,windows下用ipconfig的地址
brokerIP1 = 10.123.123.25
brokerIP2 = 10.123.123.25
namesrvAddr = localhost:9876
注意事项:
1、brokerIP要写本机IP,不能用localhost
部署图示
namesrv
broker
proxy
console
本地发送消息成功图示
附上maven-pom
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client-java</artifactId>
<version>5.0.6</version>
</dependency>