在window和Linux上使用docker安装RocketMQ

在window和Linux上使用docker安装RocketMQ_第1张图片

1.创建namesrv服务

拉取镜像

docker pull rocketmqinc/rocketmq:latest

启动 namesrv

docker run -d -p 9876:9876 -v D:/programCoding/Docker/rocketmq/namesrv/logs:/root/logs -v D:/programCoding/Docker/rocketmq/namesrv/store:/root/store --name rmqnamesrv -e "MAX_POSSIBLE_HEAP=100000000" rocketmqinc/rocketmq sh mqnamesrv

同时会在D盘对应的位置创建二个文件 

1,定位为注册中心,保存broker节点库路由信息
2,支持集群模式,每个 namesrv 之间不进行任何通信,多点容灾通过 producer/consumer 再访问 namesrv 时候轮询获取信息(当前节点访问失败就转向下一个)。
3,namesrv 作为注册中心,负责接收 broker 定期注册信息并维持再内存中,所有数据都保存在内存中,broker 定期的注册过程的也是遍历所有 namesrv 进行注册;
4,namesrv 提供对外接口对 producer 和 consumer 访问 broker 路由信息,底层用 netty 来实现。
5,namesrv 对 broker 存活检测采用心跳机制,即 namesrv 作为 broker 的 server 端定期接收 broker 的心跳信息,超时无心跳就移出 broker ,底层通过 epoll 的消息机制来检测连接是否稳定。

在window和Linux上使用docker安装RocketMQ_第2张图片

2.创建broker节点

docker run -d -p 10911:10911 -p 10909:10909 -v D:/programCoding/Docker/rocketmq/bocker/logs:/root/logs -v  D:/programCoding/Docker/rocketmq/bocker/store:/root/store -v D:/programCoding/Docker/rocketmq/conf/broker.conf:/opt/rocketmq/conf/broker.conf --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" rocketmqinc/rocketmq sh mqbroker -c /opt/rocketmq/conf/broker.conf

也会在D盘对应位置创建二个文件 

启动bocker前需要修改下 bocker.conf 配置文件, 本人的bocker.conf 的安装路径为 D:/programCoding/Docker/rocketmq/conf

文件内容

brokerClusterName = DefaultCluster // 消费模式,默认集群
brokerName = broker-a 
brokerId = 0
deleteWhen = 04// 清除未被消费消息时间,凌晨四点
fileReservedTime = 48 // 消息保留时间
brokerRole = ASYNC_MASTER // broker角色,默认为异步MASTER
flushDiskType = ASYNC_FLUSH // 刷盘策略,异步刷盘
brokerIP1 = 192.168.8.128 //Linux下填Linux公网Ip,Windows利用 docker inspect [imageId],查看IPAddress 

在window和Linux上使用docker安装RocketMQ_第3张图片

3.创建rockermq-console服务

拉取镜像

docker pull styletang/rocketmq-console-ng

构建rockermq-console容器

需要把192.168.52.136换成部署namesrv机器地址

docker run -d -e "JAVA_OPTS=-Drocketmq.config.namesrvAddr=172.29.80.1:9876 -Drocketmq.config.isVIPChannel=false" -p  9999:8080 -t --name rmConsole styletang/rocketmq-console-ng

在window和Linux上使用docker安装RocketMQ_第4张图片

 (特别注意:这个容器内的端口不能变,必须是8080,挂载的主机端口可以修改)

ip:9999 访问出现如下界面:

在window和Linux上使用docker安装RocketMQ_第5张图片

6、可能遇到的问题

1.画面可以正常启动,不过从控制台的监控日志上看,存在如下的错误日志。

org.apache.rocketmq.remoting.exception.RemotingTimeoutException: wait response on the channel <192.168.1.80:10918> timeout, 5000(ms)

原因是isVIPChannel默认为true,会监控rocketmq的vip通道,将该属性设置为false即可。

设置后的配置文件如下所示:

server.contextPath=
server.port=8080
#spring.application.index=true
spring.application.name=rocketmq-console
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
logging.config=classpath:logback.xml
#if this value is empty,use env value rocketmq.config.namesrvAddr  NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876
rocketmq.config.namesrvAddr=192.168.1.80:9876;192.168.1.81:9876
#if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
rocketmq.config.isVIPChannel=false
#rocketmq-console's data path:dashboard/monitor
rocketmq.config.dataPath=/home/hadmin/data/rocketmq
#set it false if you don't want use dashboard.default true
rocketmq.config.enableDashBoardCollect=true

2.异常信息如下
org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to failed

需要关闭防火墙或者开放namesrv和broker端口

关闭防火墙

systemctl stop firewalld.service

开放指定端口

firewall-cmd --permanent --zone=public --add-port=9876/tcp
firewall-cmd --permanent --zone=public --add-port=10911/tcp
# 立即生效
firewall-cmd --reload

你可能感兴趣的:(docker,java-rocketmq,rocketmq)