Apache RocketMQ由4个部分组成:nameServer,broker,producer,consumer,另外还提供了一个console用于监控。
- nameServer会提供基本的服务发现和路由,producer和consumer通过nameServer可以获取到broker的地址,从而与broker进行通讯
- broker则提供真正的MQ功能
图片来自官网http://rocketmq.apache.org/docs/rmq-arc/
使用docker搭建RocketMQ
首先确认机器的内网地址和外网地址,我以{内网IP},{外网IP}表示
nameserver
docker run -d -p 9876:9876 --name rmqserver \
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \
foxiswho/rocketmq:server
broker
在本地创建配置文件/etc/rocketmq/broker.conf
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# 以下是我添加的
# 配置nameserver的地址,broker需要上报状态给nameserver
namesrvAddr = {内网IP}:9876
# 配置监听地址,nameserver会将此地址提供给客户端使用
# 如果mq服务需要在外网使用则配成外网,需要在内网使用则配成内网地址
brokerIP1 = {外网IP}
# 监听端口,默认是10911
listenPort = 10911
docker run -d -p 10911:10911 -p 10909:10909 --name rmqb \
-v /etc/rocketmq/broker.conf:/etc/rocketmq/broker.conf \
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \
foxiswho/rocketmq:broker
console
docker run --name rmqconsole -p 80