最近学习使用 rocketmq,需要搭建 rocketmq 服务端,本文主要记录 rocketmq 搭建过程以及这个过程踩到的一些坑。
准备工作
在搭建之前,我们需要做一些准备工作,这里我们需要使用 docker 搭建服务,所以需要提前安装 docker。此外,由于 rocketmq 需要部署 broker 与 nameserver ,考虑到分开部署比较麻烦,这里将会使用 docker-compose。
1:先创建rocketmq的booker配置文件
文件放置到 /opt/rocketmq/conf
vim borker.conf
# 消费模式,默认集群
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
# 清除未被消费消息时间,凌晨四点
deleteWhen = 04
#消息保留时间
fileReservedTime = 48
#broker角色,默认为异步MASTER
#刷盘策略,异步刷盘
brokerRole = ASYNC_MASTER
#broker文件地址
flushDiskType = ASYNC_FLUSH
brokerIP1 = 192.168.1.2
#是否允许自动创建topic
autoCreateTopicEnable=true
需要注意:borkerIp1需要写成自己服务的ip
在创建如下文件夹:/opt/rocketmq/logs
,/opt/rocketmq/store
,最后创建 docker-compose.yml 文件,配置如下:
version: '3'
services:
namesrv:
image: rocketmqinc/rocketmq
container_name: rmqnamesrv
ports:
- 9876:9876
volumes:
- /opt/rocketmq/logs:/home/rocketmq/logs
- /opt/rocketmq/store:/home/rocketmq/store
command: sh mqnamesrv
broker:
image: rocketmqinc/rocketmq
container_name: rmqbroker
ports:
- 10909:10909
- 10911:10911
- 10912:10912
volumes:
- /opt/rocketmq/logs:/home/rocketmq/logs
- /opt/rocketmq/store:/home/rocketmq/store
- /opt/rocketmq/conf/broker.conf:/opt/rocketmq/conf/broker.conf
command: sh mqbroker -n namesrv:9876 -c /opt/rocketmq/conf/broker.conf
depends_on:
- namesrv
environment:
- JAVA_HOME=/usr/lib/jvm/jre
console:
image: styletang/rocketmq-console-ng
container_name: rocketmq-console-ng
ports:
- 8087:8080
depends_on:
- namesrv
environment:
- JAVA_OPTS= -Dlogging.level.root=info -Drocketmq.namesrv.addr=rmqnamesrv:9876
- Dcom.rocketmq.sendMessageWithVIPChannel=false
注意点
这里需要注意 rocketmq broker 与 rokcetmq-console 都需要与 rokcetmq nameserver 连接,需要知道 nameserver ip。使用 docker-compose 之后,上面三个 docker 容器将会一起编排,可以直接使用容器名代替容器 ip,如这里 nameserver 容器名 rmqnamesrv。
配置完成之后,运行 docker-compose up 启动三个容器,启动成功后,访问 ip:8087,查看 mq 外部控制台,如果可以看到以下信息,rocketmq 服务启动成功。
因为rocker默认需要的xmn、xms、xmx都是比较大的。我们基于当前运行的:rocketmqinc/rocketmq 来把这三个参数设置小
进入到 rmqbroker也就是rocketmqinc/rocketmq容器中。
代码语言:javascript复制docker exec -it 9e874be84d55 bash
注意:修改容器id为自己的。
因为默认没有vim命令。安装vim
代码语言:javascript复制yum install supervisor
yum clean all
yum makecache
yum -y install vim
进入到rocketmq-4.4.0中。
我们可以看到这个值很大的。修改-Xms2048m -Xmx2048m -Xmn10248m
修改runserver.sh
代码语言:javascript复制vim runserver.sh
修改这三个值:
修改完成之后,我们基于这个修改的制作一个新镜像
这个命令是在宿主机中执行的。
制作新镜像命令模板:
代码语言:javascript复制docker commit -m“提交内容” -a“制作人” 容器id 镜像:TAG
实战命令:
代码语言:javascript复制docker commit -m "broker xms xmx xmn update" -a "kaigejava" 9e874be84d55 rocketmqinc/rocketmq:xms256
我们重新查看制作的镜像:
我们把当前运行的容器都删除。
代码语言:javascript复制docker rm -f $(docker ps -qa)
我们重新制作docker-compose.yml
新建一个文件夹
代码语言:javascript复制mkdir newcompose
cp ../docker-compose.yml docker-compose.yml
重新编辑compose文件:
代码语言:javascript复制version: '3'
services:
namesrv:
image: rocketmqinc/rocketmq
container_name: rmqnamesrv
ports:
- 9876:9876
volumes:
- /opt/rocketmq/logs:/home/rocketmq/logs
- /opt/rocketmq/store:/home/rocketmq/store
command: sh mqnamesrv
broker:
image: rocketmqinc/rocketmq:xms256
container_name: rmqbroker
ports:
- 10909:10909
- 10911:10911
- 10912:10912
volumes:
- /opt/rocketmq/logs:/home/rocketmq/logs
- /opt/rocketmq/store:/home/rocketmq/store
- /opt/rocketmq/conf/broker.conf:/opt/rocketmq/conf/broker.conf
command: sh mqbroker -n namesrv:9876 -c /opt/rocketmq/conf/broker.conf
depends_on:
- namesrv
environment:
- JAVA_HOME=/usr/lib/jvm/jre
console:
image: styletang/rocketmq-console-ng
container_name: rocketmq-console-ng
ports:
- 8087:8080
depends_on:
- namesrv
environment:
- JAVA_OPTS= -Dlogging.level.root=info -Drocketmq.namesrv.addr=rmqnamesrv:9876
- Dcom.rocketmq.sendMessageWithVIPChannel=false
在新目录下重启docker-compose up -d