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 问题的更多相关文章

  1. RocketMQ原理解析-Remoting

    Remoting2. 通信层底层传输协议 RocketMq服务器与客户端通过传递RemotingCommand来交互,通过NettyDecoder,对RemotingCommand进行协议的编码与解码 ...

  2. RocketMQ原理解析-Broker

    broker 1. broker的启动 brker的启动 Broker向namesrv注册 1. 获取namesrv的地址列表(是乱序的) 2. 遍历向每个namesrv注册topic的配置信息top ...

  3. RocketMQ原理解析-Consumer

    consumer 1.启动 有别于其他消息中间件由broker做负载均衡并主动向consumer投递消息,RocketMq是基于拉模式拉取消息,consumer做负载均衡并通过长轮询向broker拉消 ...

  4. RocketMQ原理解析-Producer

    producer  producer 1.启动流程 Producer如何感知要发送消息的broker即brokerAddrTable中的值是怎么获得的, 1. 发送消息的时候指定会指定topic,如果 ...

  5. 分布式开放消息系统(RocketMQ)的原理与实践

    分布式消息系统作为实现分布式系统可扩展.可伸缩性的关键组件,需要具有高吞吐量.高可用等特点.而谈到消息系统的设计,就回避不了两个问题: 消息的顺序问题 消息的重复问题 RocketMQ作为阿里开源的一 ...

  6. rocketmq生产者和消费者

    1.生产者: package com.ebways.mq.test.mq; import com.alibaba.rocketmq.client.exception.MQClientException ...

  7. rocketmq查看命令

    首先进入 RocketMQ 工程,进入/RocketMQ/bin   在该目录下有个 mqadmin 脚本 .  查看帮助:   在 mqadmin 下可以查看有哪些命令    a: 查看具体命令的使 ...

  8. rocketmq生产者部署的机器注意事项

    报错: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'warningP ...

  9. Kafka vs RocketMQ——多Topic对性能稳定性的影响-转自阿里中间件

    引言 上期我们对比了RocketMQ和Kafka在多Topic场景下,收发消息的对比测试,RocketMQ表现稳定,而Kafka的TPS在64个Topic时可以保持13万,到了128个Topic就跌至 ...

  10. Kafka vs RocketMQ—— Topic数量对单机性能的影响-转自阿里中间件

    引言 上一期我们对比了三类消息产品(Kafka.RabbitMQ.RocketMQ)单纯发送小消息的性能,受到了程序猿们的广泛关注,其中大家对这种单纯的发送场景感到并不过瘾,因为没有任何一个网站的业务 ...

随机推荐

  1. springmvc当要返回中文字符串时出现乱码

    当过滤器,页面编码都对,tomcat版本在8以上(8内部默认用utf-8) 在方法参数中加上,produces="text/html;charset=UTF-8" 绝对可以解决!! ...

  2. Java Lambda表达式 Stream

    Stream Stream不是集合元素,它不是数据结构并不保存数据,而是有关算法和计算的,更像是一个高级版本的Iterator,原始版本的Iterator,用户只能显式地一个一个遍历元素并对其进行操作 ...

  3. FXP登录Linux报错

    1.用FXP登录Linux报错: [info] subsystem request for sftp failed, subsystem not found.[右] [execute] /usr/li ...

  4. JS的文本框验证以及form表单的提交阻止

    js: 1.只能输入数字 只能输入数字:<input type="text" onkeyup="javascript:ReNumber(this)" /& ...

  5. go实现生产者消费者

    package main import ( "fmt" "math/rand" ) func main() { ch := make(chan int) don ...

  6. hasNextInt()方法

    hasNextInt()方法是判断控制台接收是否为数字,当你在控制台输入一个字符的时候,hasNextInt()判断你输入这个字符是不是数字,而不是接收值,当if判断通过之后执行接收,也就是你输入的那 ...

  7. php后端程序开发学习网站梳理

    博主只列举自己经常用到的: 看教学视频:慕课网,网易云课堂,百度传课 看博文和知识点:csdn 看源码:github 刷题:codewars 学习框架:thinkphp官网 下载相关资源:csdn 看 ...

  8. QT如何设置应用程序的图标

    QT如何设置应用程序的图标 准备:.ico格式的图片,可以选择任意其他图片格式的一张图片用格式工厂转换成.ico图片     例如选用的图片是Application.ico 把图片放到工程目录下 在工 ...

  9. moment算本月开始日期和结束日期

    moment算本月开始日期和结束日期 1.引入moment.js var vStartDate=new moment().add('month',addMonth).format("YYYY ...

  10. CDN加速静态文件服务器的访问

    1.用于加速用户下载资源的速度. 简单来说,CDN相当于一个中间代理,原来我们需要请求某个网址比如www.baidu.com,请求会直接发送至百度的服务器上,假如请求者在新疆,但百度的服务器在北京,这 ...