docker安装RocketMQ(单节点)
RocketMQ的部署架构包括以下几个核心组件:
-
Name Server(命名服务器):用于管理所有的Broker节点的信息,包括Broker的地址、Topic的路由信息等。生产者和消费者通过与Name Server交互获取Broker的地址,从而进行消息的发送和消费。
-
Broker(消息中间件服务器):负责存储和转发消息。一个Broker节点可以承载多个Topic的消息,每个Topic可以有多个队列,每个队列可以有多个消费者。
-
Producer(消息生产者):负责将消息发送到Broker,可以将消息发送到指定的Topic和队列。
-
Consumer(消息消费者):负责从Broker订阅并消费消息。消费者可以以集群模式或广播模式消费消息,集群模式下一个消费组内的消费者共同消费消息,广播模式下每个消费者都可以独立消费消息。
-
Message Queue(消息队列):用于存储消息的队列,每个队列都有一个唯一的ID,消息按照队列的顺序进行存储和消费。
-
Topic(消息主题):消息的逻辑分类,生产者将消息发送到指定的Topic,消费者可以订阅指定的Topic来消费消息。
RocketMQ的部署架构可以根据实际需求进行扩展和调整,可以通过增加Broker节点、调整Topic的分区数、增加消费者等方式来提高系统的性能和可用性。
一、拉取镜像
[root@docker /]# docker pull foxiswho/rocketmq:server-4.7.0
[root@docker /]# docker pull foxiswho/rocketmq:broker-4.7.0
[root@docker /]# docker pull foxiswho/rocketmq:styletang/rocketmq-console-ng
#【离线】安装时:使用联网的docker服务器拉取镜像并打包出来
#拉取
docker pull [镜像名称]:[版本]
例如:docker pull elasticsearch:7.10.1
#打包镜像为压缩包
docker save -o [压缩包路径] [镜像名称]:[版本]
例如:docker save -o /data/app/elasticsearch-7.2.1.tar elasticsearch:7.10.1
#将镜像压缩包上传到离线的服务器上,加载离线镜像
docker load -i [压缩包路径]
例如:docker load -i elasticsearch-7.2.1.tar
#查看镜像
[root@docker /]# docker ps
foxiswho/rocketmq server-4.7.0 40eace81be52 3 years ago 498MB
foxiswho/rocketmq broker-4.7.0 7f35e57e1383 3 years ago 498MB
styletang/rocketmq-console-ng latest 7df83bb6e638 6 years ago 702MB
二、创建挂载目录
#创建并赋权-broker
[root@docker /]# mkdir -p /data/software/rocketmq-broker/9876/conf /data/software/rocketmq-broker/9876/logs /data/software/rocketmq-broker/9876/store
[root@docker /]# chmod 777 /data/software/rocketmq-broker/9876/conf /data/software/rocketmq-broker/9876/logs /data/software/rocketmq-broker/9876/store
#创建并赋权-nameserver
[root@docker /]# mkdir -p /data/software/rocketmq-server/9876/conf /data/software/rocketmq-server/9876/logs /data/software/rocketmq-server/9876/store
[root@docker /]# chmod 777 /data/software/rocketmq-server/9876/conf /data/software/rocketmq-server/9876/logs /data/software/rocketmq-server/9876/store
三、添加修改配置文件
#在 /data/software/rocketmq-broker/9876/conf目录下创建文件broker.conf
[root@docker /]# touch broker.conf
[root@docker /]# vi broker.conf
#将以下内容粘贴进去,IP改为对应的IP
namesrvAddr=192.168.21.132:9876
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerIP1 = 192.168.21.132
listenPort=10911
四、启动容器
#启动rocketmq-server
docker run -d \
--restart=always \
--name rmqnamesrv \
-p 9876:9876 \
-v /data/software/rocketmq-server/9876/logs:/root/logs \
-v /data/software/rocketmq-server/9876/store:/root/store \
-e "MAX_POSSIBLE_HEAP=100000000" \
foxiswho/rocketmq:server-4.7.0 \
sh mqnamesrv
#启动rocketmq-broker
docker run -d \
--restart=always \
--name rmqbroker \
--link rmqnamesrv:namesrv \
-p 10911:10911 \
-p 10909:10909 \
-v /data/software/rocketmq-broker/9876/logs:/root/logs \
-v /data/software/rocketmq-broker/9876/store:/root/store \
-v /data/software/rocketmq-broker/9876/conf/broker.conf:/opt/rocketmq-4.7.0/conf/broker.conf \
-e "NAMESRV_ADDR=namesrv:9876" \
-e "MAX_POSSIBLE_HEAP=200000000" \
-e "autoCreateTopicEnable=true" \
foxiswho/rocketmq:broker-4.7.0 \
sh mqbroker -c /opt/rocketmq-4.7.0/conf/broker.conf
#启动RocketMQ的管理工具rocketmq-console
docker run -itd -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.21.132:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8082:8080 -t styletang/rocketmq-console-ng:latest
五、容器检查
通过宿主机IP:8082访问rocketmq-console:
可以看到集群信息已读取到。