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)单纯发送小消息的性能,受到了程序猿们的广泛关注,其中大家对这种单纯的发送场景感到并不过瘾,因为没有任何一个网站的业务 ...
随机推荐
- VMware下OSSIM 4.1.0的下载、安装和初步使用(图文详解)
不多说,直接上干货! 为什么,我写了一篇OSSIM 5.2.0的,还要再来写OSSIM 4.1.0呢,是因为,OSSIM 5.2.0所需内存较大,8G甚至16G,但是,肯定性能和里面集成组件越高级.也 ...
- Tame Your Software Dependencies for More Flexible Apps
http://msdn.microsoft.com/en-us/magazine/cc337885.aspx
- while嵌套应用二:九九乘法表
__author__ = 'zht' #!/usr/bin/env python # -*- coding: utf-8 -*- ''' #努力学习每一天 ''' #while嵌套应用二:九九乘法表 ...
- How many '1's are there题解
Description: Description: 第一行输入数字n(n<=50),表示有n组测试用例,第2到第n+1行每行输入数m(m为整数),统计并输出m用二进制表示时,1的个数. 例如:m ...
- 【Web应用-Kudu】Kudu 管理和诊断 azure web 应用
Azure Kudu是 GitHub 上的一个开源项目,Kudu 站点 (也称为网站控制管理 SCM) 提供了一系列的在线工具,可以帮助用户查看 web 应用的设置,诊断 web 应用,以及安装 w ...
- 求矩阵的n次方 c语言实现
矩阵的n次方,比较容易理解的想法是递归. 思路是这样的,把n分成两部分,当n是偶数的时候,即为左右两边的乘积,如果n是奇数,即为左右两边的乘积再乘a ) matrixn())^*a else matr ...
- Slacklining 2017/2/6
原文 Get ready for a different kind of challenge What happens when mountain climbers take a day off?Ap ...
- NBUT 1115 Cirno's Trick (水)
题意: 给出多个double数,去掉其最小的和最大的,再对余下的求均值. 思路: 再输入时将最大和最小去掉,顺便统计非最值的和,输出时除一下个数即可. #include <bits/stdc++ ...
- 添加/删除 windows下Git右键菜单
从网上搜索了些方法,总结一下 不显示右键菜单: 方法1: 安装的时候选择不添加右键菜单. 方法2(绝对有效): 运行CMD Windows 64 输入命令(地址为git安装地址) cd "C ...
- Java中的线程--线程中的工具
这主要想写一下Java中的jdk提供的一些线程中的工具, 一.semaphore信号灯 Semaphore可以维护当前访问自身的线程个数,并提供了同步机制,使用Semaphore可以控制同时访问资源的 ...