项目场景:
Docker运行RocketMQ
操作记录:
默认已经安装docker
拉取镜像
docker pull rocketmqinc/rocketmq
运行nameserver
docker run -p 9876:9876 --name rmqnamesrv -d rocketmqinc/rocketmq:latest sh mqnamesrv
在宿主机创建broker.conf和容器内映射
我的是在/MyPrograms/rocketmq/conf/下
broker.conf内容简略为
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
namesrvAddr = 192.168.171.132:9876
brokerIP1 = 192.168.171.132
#
#自动创建Topic,建议线上关闭,线下开启
autoCreateTopicEnable = true
#自动创建订阅组,建议线上关闭,线下开启
autoCreateSubscriptionGroup = true
运行broker
sudo docker run --privileged=true --name rmqbroker --link rmqnamesrv:namesrv -v /MyPrograms/rocketmq/conf/:/opt/rocketmq/conf/ -e NAMESRV=namesrv:9876 -e JAVA_OPT_EXT="-server -Xms256m -Xmx256m" -p 10911:10911 -p 10909:10909 -e autoCreateTopicEnable=true -d rocketmqinc/rocketmq:latest sh mqbroker -c /opt/rocketmq/conf/broker.conf&
常见问题:
java客户端操作Rocketmq报错
org.apache.rocketmq.client.exception.MQClientException: No route info of this topic, xxx
原因1: broker配置未生效,不能自动创建topic(如果你跟着我上面来操作,则这个原因的可能性很小)
原因2:java client操作rocketmq依赖包版本低了,不支持自动创建topic,升级到4.4.0以上即可
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.4.0</version>
</dependency>