用于测试时进行rocketmq的批量启动,方便学习使用;
前置命令
mkdir -p /usr/local/soft/rocketmq/mq/conf #配置文件路径
mkdir -p /usr/local/soft/rocketmq/mq/logs #mq日志路径
mkdir -p /usr/local/soft/rocketmq/mq/store #mq数据存储路径
chmod 777 /usr/local/soft/rocketmq/mq/logs #设置日志路径的权限
docker network create nginx_network #创建docker网络,我这是按照nginx进行创建,如果存在一个公网机,两个内网机,可以通过nginx的公网机进行broker的转发
broker.conf
注意每个配置后面不要有 #号的注释,否则会被直接拼接到brokerName上
#集群的名称 (不要将注释放在每一行的后面,否则会被追加到后面)
brokerClusterName = DefaultCluster
#broker的名称
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# 如果出现 com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <172.0.0.120:10909> failed,将下面改成宿主机IP
#brokerIP1 = 127.0.0.1
docker-compose
version: '3'
services:
mqnamesrv:
# image: foxiswho/rocketmq:4.8.0
build:
context: .
dockerfile: Dockerfile-rocketmq #自定义镜像文件的构建,原文件中文乱码
restart: on-failure
container_name: mqnamesrv
ports:
- "9876:9876"
networks:
- nginx_network
# volumes:
# - "/usr/local/soft/rocketmq/mqsrv/logs:/home/rocketmq/logs" #namesrv的日志路径,需要设置权限为777
environment:
JAVA_OPT: -server -Xms256m -Xmx256m
command: sh mqnamesrv
mqbroker:
# image: foxiswho/rocketmq:4.8.0
build:
context: .
dockerfile: Dockerfile-rocketmq
restart: on-failure
container_name: mqbroker
ports:
- "10911:10911"
- "10909:10909"
volumes: #目前使用只用于测试,不需要映射数据目录
- "/usr/local/soft/rocketmq/mq/conf:/home/rocketmq/conf"
- "/usr/local/soft/rocketmq/mq/logs:/home/rocketmq/logs" #日志映射需要设置为777
# - "/usr/local/soft/rocketmq/mq/store:/home/rocketmq/store" #数据存储路径
networks:
- nginx_network
environment:
NAMESRV_ADDR: "mqnamesrv:9876"
JAVA_OPT_EXT: -Xms256m -Xmx256m -Xmn128m
JAVA_HOME: /usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.275.b01-0.el7_9.x86_64 #配置java_home路径到环境变量中,否者执行 mqadmin工具台命令会报错
JRE_HOME: ${JAVA_HOME}/jre
command: sh mqbroker -c /home/rocketmq/conf/broker.conf
mqconsole: #启动控制台
image: styletang/rocketmq-console-ng
container_name: rocketmq-console
ports:
- "19876:8080"
environment:
JAVA_OPTS: -Drocketmq.namesrv.addr=mqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=falses
networks:
- nginx_network
# 需要提前创建好网络,将服务加入到nginx网络中,便于容器互通
networks:
nginx_network:
external: true
Dockerfile-rocketmq
这里采用了一个自定义的容器镜像,以官方镜像作为基础,然后添加中文支持
FROM foxiswho/rocketmq:4.8.0
USER root
RUN yum install kde-l10n-Chinese -y && yum install glibc-common -y
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf-8
RUN export LANG=zh_CN.UTF-8
RUN echo "export LANG=zh_CN.UTF-8" >> /etc/locale.conf
ENV LANG=zh_CN.UTF-8 LC_ALL=zh_CN.UTF-8