rocketmq 问题
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--
rocketmq 问题的更多相关文章
- RocketMQ原理解析-Remoting
Remoting2. 通信层底层传输协议 RocketMq服务器与客户端通过传递RemotingCommand来交互,通过NettyDecoder,对RemotingCommand进行协议的编码与解码 ...
- RocketMQ原理解析-Broker
broker 1. broker的启动 brker的启动 Broker向namesrv注册 1. 获取namesrv的地址列表(是乱序的) 2. 遍历向每个namesrv注册topic的配置信息top ...
- RocketMQ原理解析-Consumer
consumer 1.启动 有别于其他消息中间件由broker做负载均衡并主动向consumer投递消息,RocketMq是基于拉模式拉取消息,consumer做负载均衡并通过长轮询向broker拉消 ...
- RocketMQ原理解析-Producer
producer producer 1.启动流程 Producer如何感知要发送消息的broker即brokerAddrTable中的值是怎么获得的, 1. 发送消息的时候指定会指定topic,如果 ...
- 分布式开放消息系统(RocketMQ)的原理与实践
分布式消息系统作为实现分布式系统可扩展.可伸缩性的关键组件,需要具有高吞吐量.高可用等特点.而谈到消息系统的设计,就回避不了两个问题: 消息的顺序问题 消息的重复问题 RocketMQ作为阿里开源的一 ...
- rocketmq生产者和消费者
1.生产者: package com.ebways.mq.test.mq; import com.alibaba.rocketmq.client.exception.MQClientException ...
- rocketmq查看命令
首先进入 RocketMQ 工程,进入/RocketMQ/bin 在该目录下有个 mqadmin 脚本 . 查看帮助: 在 mqadmin 下可以查看有哪些命令 a: 查看具体命令的使 ...
- rocketmq生产者部署的机器注意事项
报错: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'warningP ...
- Kafka vs RocketMQ——多Topic对性能稳定性的影响-转自阿里中间件
引言 上期我们对比了RocketMQ和Kafka在多Topic场景下,收发消息的对比测试,RocketMQ表现稳定,而Kafka的TPS在64个Topic时可以保持13万,到了128个Topic就跌至 ...
- Kafka vs RocketMQ—— Topic数量对单机性能的影响-转自阿里中间件
引言 上一期我们对比了三类消息产品(Kafka.RabbitMQ.RocketMQ)单纯发送小消息的性能,受到了程序猿们的广泛关注,其中大家对这种单纯的发送场景感到并不过瘾,因为没有任何一个网站的业务 ...
随机推荐
- git stash暂存当前正在进行的工作
git stash 可用来暂存当前正在进行的工作, 比如想pull 最新代码, 又不想加新commit, 或者另外一种情况,为了fix 一个紧急的bug, 先stash, 使返回到自己上一个comm ...
- 装饰者模式--Java篇
装饰者模式(Decorator):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰者模式比生成子类更为灵活. 1.定义接口,可以动态的给对象添加职责. package com.lujie; p ...
- ios调用Html内JS alert 不能点击关闭为甚?
ios调用Html内JS alert 不能点击关闭为甚? This question gave me the most insight to the problem... Deadlock with ...
- hdu6376 度度熊剪纸条
思路: 01背包.有些细节需要注意一下,比如k = 0的情况. 实现: #include <bits/stdc++.h> using namespace std; typedef pair ...
- 常用验证函数isset()/empty()/is_numeric()函数
1) isset()用来检查变量是否设置,若变量存在且值不为NULL时为TRUE: 检查多个变量时变量要全部存在且值不为NULL时为TRUE: 若用函数unset()释放后再用isset()检测时为F ...
- 原来MFC窗口样式随字符集而改变
以前好像发现,MFC窗口上按钮的自动样式有时是有亮色边框3D效果的,有时没有,不知道原因,也没有追究,今天正好有机会发现了原因,原来是随字符集而改变的. 1.Unicode版本下的窗口 2.未设置的窗 ...
- jquery mobile 的手指上下滑动文章、导航栏
导航栏的js设置 <!--导航栏的滚动 --> <script type="text/javascript"> var myScroll, pullDown ...
- CPU性能的评价
人们通常用benchmark 来衡量CPU的性能,常见的benchmark有dhrystone和coremark. 由于dhrystone 受编译器影响比较大,所以,结果不是很准确,现在大多采用cor ...
- ThreadLocal使用,应用场景,源码实现,内存泄漏
首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的.各 ...
- Slacklining 2017/2/7
原文 Proline Slacklining's expansion is still in process,but it already has a professional scene.Some ...