RocketMQ记录

1、启动namesrv

(-c 指定加载配置文件)
nohup sh mqnamesrv &
nohup sh mqnamesrv -c ../conf/namesrv/namesrv.properties &

2、启动broker

(-n 指定namesrv地址 -c 指定加载配置文件)

nohup sh mqbroker -c ../conf/broker.properties &
nohup sh mqbroker -n 2409:8089:1010:6010:2001::132:9876 -c ../conf/broker.properties &

查看启动是否正常:
显示当前所有java进程:jps
查看mq进程:ps -ef|grep rocketmq
查看启动日志输出:tail -f nohup.out
查看日志:/home/logs/rocketmqlogs(broker.log、namesrv.log)

3、关闭

sh mqshutdown namesrv
sh mqshutdown broker
./bin/mqshutdown broker
./bin/mqshutdown namesrv

4、其他命令

#新增topic(-n 指定namesrv地址 -c 指定群组名称 -t 指定新增topic名称)
sh mqadmin updatetopic -n 192.168.10.1:9876 -c DefaultCluster -t topic-test
#删除topic(-n 指定namesrv地址 -c 指定群组名称 -t 指定删除topic名称)
sh mqadmin deleteTopic –n 192.168.10.1:9876 –c DefaultCluster –t topic-test
#查看所有topic
sh mqadmin topicList -n 192.168.10.1:9876
查看topic路由
sh mqadmin topicRoute –n 192.168.10.1:9876 -t topic-test
#查看topic信息列表详情统计
sh mqadmin topicstatus -n 192.168.10.1:9876 -t topic-test
#查看所有消费组group
sh mqadmin consumerProgress -n 192.168.10.1:9876
#查看指定消费组下的所有topic数据堆积情况
sh mqadmin consumerProgress -n 192.168.10.1:9876 -g topic-test
#查询集群消息
sh mqadmin  clusterList -n 192.168.10.1:9876

#创建订阅组:
sh mqadmin updateSubGroup -c DefaultCluster -g testConsumerGroupName
#删除订阅组:
sh mqadmin deleteSubGroup -c DefaultCluster -g testConsumerGroupName
#查看订阅组消费状态:
sh mqadmin consumerProgress -n 192.168.10.1:9100

5、遇到的问题

1> 启动broker时随脚本退出broker也停止

服务器没有nohup命令,执行启动broker命令后,Crtl+C,结果broker就shutdown了,即便加了&
sh mqbroker -n 192.168.10.1:9100;192.168.10.2:9100 -c ../conf/broker-m-9101.properties &
最后通过执行如下命令,并且不要Crtl+C,直接关闭服务器后,broker未被停止:
sh mqbroker -c ../conf/broker-m-9101.properties &

2>WARN RocketmqClient: get Topic [TBW102] RouteInfoFromNameServer is not exist value

原因:
broker配置关闭了autoCreateTopicEnable,不存在名为TBW102的topic,消息生产者从NameServer获取路由失败。
开启状态下,brocker启动时会自动创建一个名称为TBW102的默认Topic,通过这个默认topic来获取路由信息进行自动创建其他topic。

不能开启autoCreateTopicEnable的原因:(无法实现broker负载)
https://blog.csdn.net/prestigeding/article/details/91476328

3>启动时异常处理

清理:storePathRootDir=/data/rocketmq/store
日志:/home/appUser/logs/rocketmqlogs(broker.log、namesrv.log)

4>autoCreateTopicEnable

autoCreateTopicEnable:rocketmq自动创建topic,不能真正做到每个broker自动创建topic,不能做到每个broker负载均衡topic。原因:
broker:每个broker的TopicConfigMange构造方法检测若开启了自动创建topic,则创建名为TBW102的默认topic,8个队列。每个broker每30秒向每个nameserver发送topic路由信息。nameserver得到默认的topic路由。
producer:生产者向mq发送自定义topic消息,首先查询本地缓存topic信息,发现不存在,则去主动请求nameserver获取topic信息,仍然没找到,则再次向nameserver获取默认TBW102的topic路由信息,将其作为自定义topic的路由缓存至本地,此时自定义topic的路由包含每个broker的8个队列,轮询选取其中一个broker的队列发送消息,broker收到消息发现不存在topic,判断开启了自动创建topic,则当前broker创建自定义topic默认4个队列。此时,生产者没在继续发送消息,其他broker没有收到消息,没有创建topic。broker下一个30秒时将topic路由同步到nameserver,生产者每30秒从nameserver获取topic 信息,取到自定义topic对应的路由只有一个broker4个队列,覆盖保存到本地缓存,生产者下次发送消息时查询本地缓存有topic路由信息,则发送消息到这个broker,其他broker则永远不会去创建topic,形成broker单点处理topic,达不到所有broker负载topic信息。因而不建议线上开启自动创建topic。除非生产者短时间连续发送消息,才能在轮询时将消息发送到每个broker,实现每个broker创建topic。
思考解决:
1、若producer这样设计:生产者配置自动创建topic选项,若开启,发送消息时,判断本地缓存不存在topic路由,nameserver也不存在,则获取nameserver默认topic TBW102路由,主动向每个autoCreateTopicEnable
        为true的broker发送探测,broker收到探测,判断本地不存在topic,判断已开启自动创建,则直接创建topic,这样每个broker都可以完成自动创建topic。
    更全面的设计:生产者配置需要自动创建的topic,生产者初始化时直接向broker发送探测创建topic。这样第一次发送消息时不需要耽误时间。
2、基于现状设计:生产者初始化时连续快速发送指定topic信息,以在轮询时遍历到每个broker,达到每个broker自动创建topic。消费者收到此类消息不做处理。有点手动促使自动创建的意思。
3、docker部署,启动后执行创建topic命令

你可能感兴趣的:(消息中间件,rocketmq)