最近项目中使用阿里的rocketmq来做消息队列,具体怎么使用rocketmq不在本文讨论范围之内,其相关帮助文档可以参考如下链接
https://help.aliyun.com/product/29530.html?spm=a2c4g.11186623.6.540.afd02578y4vHe4
本文主要记录在使用rocketmq client时,遇到的一些坑,作者采用的客户端版本是4.2
遇到这种情况的原因可能有
1、Broker禁止自动创建Topic,且用户没有通过手工方式创建Topic
解决方案
在启动broker时加上 autoCreateTopicEnable=true,如果是用broker.conf启动,或者集群使用broker-*启动,形如:
nohup sh /oa/other/rocketmq/bin/mqbroker -c /oa/other/rocketmq/conf/2m-noslave/broker-a.properties >/dev/null 2>&1 &
broker-a.properties配置文件中加入
autoCreateTopicEnable=true
2、Broker没有正确连接到Name Server
解决方案
查看broker.log 日志信息
3、Producer没有正确连接到Name Server
解决方案
切换到rocketmq的bin目录,执行
sh mqadmin clusterList -n 安装rocketmqip地址:9876
如果出现
#Cluster Name #Broker Name #BID #Addr #Version #InTPS(LOAD) #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE
DefaultCluster broker-a 0 ip:10911 V4_2_0_SNAPSHOT 0.00(0,0ms) 0.00(0,0ms) 0 429243.32 0.2995
说明正常连接
4、防火墙原因
解决方案
关闭防火墙(生产环境不建议),开放rocketmq的相应端口,或者加入相应的可以访问rocketmq的ip
5、topic的长度过长
这个有待验证
产生的原因:
rocketmq默认开启了vip通道
解决方案:
在客户端代码层面加入
producer.setVipChannelEnabled(false);
consumer.setVipChannelEnabled(false);
1、如果出现开始发送消息成功,消费者接收消息后,再发送消息的话,出现上诉异常,则有很大概率是机器磁盘空间不足
解决方案:
1、df -lh 查看磁盘空间大小 2、top 查看%MEM%占用前五的进程 3、按需删除没用的磁盘空间
2、检查网络是否畅通
消息队列网络方面的排查,请参考:
http://help.aliyun.com/knowledge_detail/6671409.html?spm=5176.789006189.3.6.UbsCt3
3、如果是使用虚拟机,可能虚拟机中的网络太多,rocketMQ在自动识别网络的时候识别错误。
解决方案
可以把其他网络down掉,或者把想用的那个网让它排在前面