1. 收不到消息-consumerOffset.json 信息错位

这种情况一般是,手动删除了store/commitlog目录里的数据等非常规手段造成了consumerOffset.json中记录的还是原来的信息,导致consumer收不到消息。

rocketmq的broker,一个消息主题对应多个队列,这些队列的消费进度会记录在consumerOffset.json文件中。所以一旦这个文件中记录的还是老的offset信息,那么既然就消费不到消息。

一个主题对应几个队列,是记录在$home/store/config/topics.json中的。

topics.json同事发现 如果是自动创建topic,则此处值默认是4,对应broker配置文件的defaultTopicQueueNums项目。如果是手动创建,此处值是8。

注意上面这个文件的路径,目前分析来看,即使你在broker的配置文件中指定了storePathRootDir在其他路径,但是topics.json的信息还是在上面读取。因为这个定制配置信息是后加载的。(rocketmq版本 3.5.8)

这种问题处理办法,如果不是生产环境,可以停掉broker然后把store目录删除,重启broker。

此处收不到 消息没有任何报错。

2. 收不到消息-subscription group not exist

这种情况是在broker的配置文件中设置了autoCreateSubscriptionGroup项为false(默认这一项值true)。

解决办法:要么将上述配置项修改成true。要么用命令行创建订阅组。

sh mqadmin updateSubGroup -g test_group -n localhost:9876 -b localhost:10911

注意:这种情况 在pull形式消费时会报错,在push形式消费时没有任何错误。

错误异常代码:

response.setCode(ResponseCode.SUBSCRIPTION_GROUP_NOT_EXIST);
response.setRemark("subscription group not exist, " + requestHeader.getConsumerGroup() + " "
+ FAQUrl.suggestTodo(FAQUrl.SUBSCRIPTION_GROUP_NOT_EXIST));

3. 收不到消息-一般需要定位哪些代码

正常来讲,分为两个方面,一是看producer端发送消息有没有成功,而是看consumer端有没有拿到消息

1. producer端定位broker服务的

com.alibaba.rocketmq.store.CommitLog.putMessage(MessageExtBrokerInner)

看看这个方法的返回的result是不是成功的即可。

详细分析参见我之前写的  rocketmq源码分析2-broker的消息接收

2. consumer端定位broker服务的

com.alibaba.rocketmq.broker.processor.PullMessageProcessor.processRequest(Channel, RemotingCommand, boolean)

看看能不能走到方法体中的case found分支即可。

详细分析参见我之前写的 rocketmq源码分析3-consumer消息获取

4. 消费完的消息 哪去了

我们在消费完消息后,如果是push的形式 我们会回一个success的状态,如果是pull的形式我们会更新offset。此处可以看到,消费完之后,更新的消息消费的offset,以使mq不会再定时push给你。

那么消费完的消息在broker上还在不在?答案是在的,硬盘上有存储。因为我们可以通过根据消息id查看的消息的方式找到消息。

MessageExt viewMessage = consumer.viewMessage("0A00007400002A9F0000000000010C5E");

当然,rocketmq允许你配置,消息留存多长时间,以及每天几点清除。

--EOF--

最新文章

  1. Ajax跨域:jsonp还是CORS
  2. javascript和jquery动态创建html元素
  3. Hibernate查询之SQL查询
  4. HDU2523:SORT AGAIN
  5. java数据类型与二进制
  6. Check whether a remote server port is open on Linux
  7. 【洛谷2986】【USACO10MAR】伟大的奶牛聚集
  8. C#在window服务配置Log4Net.dll
  9. 爬虫高性能 asyncio库 twisted库 tornado库
  10. zabbix添加nginx监控
  11. Python-图片文字识别
  12. Win10系列:VC++ Direct3D模板介绍1
  13. 进程优先和ACL
  14. linux下lamp环境修改网站根目录
  15. pip 安装包提速
  16. 锁(1)-- java锁
  17. Linux网络流量监控与分析工具Ntopng
  18. Java访问重定向接口
  19. vim制表符占位个数修改
  20. less的使用总结

热门文章

  1. php pack、unpack、ord 函数使用方法(二进制流接口应用实例)
  2. 如何连接MDB数据,并且获取相关的数据
  3. sublime text less安装踩坑图文讲解(less无法生成css)
  4. 进程间通信,把字符串指针作为参数通过SendMessage传递给另一个进程,不起作用
  5. Android Studio你必须学会的快捷键(Eclipse转AS必看)
  6. uvm_agent——007(特工)
  7. 【NumPy学习指南】day4 多维数组的切片和索引
  8. lsattr
  9. 分布式定时任务的redis锁实现
  10. JBOSS连接池默认连接数是多少?在哪个配置文件有这个默认的连接数?