RocketMQ延迟消息无法正常消费的问题

今天在开发环境发现使用rocketmq延迟消息不能被正常转换为正常topic消息,花了很长时间排查发现是offsetId的问题。

延迟消息topic统一为SCHEDULE_TOPIC_XXXX,当延迟时间到了,消息自动转化为设置的实际topic。延迟消息如下图所示:

然后开始排除问题:发现broker配置都很正常。messageDelayLevel使用的默认配置,18个level都正常。

然后就是level从1开始试,dalayLevel = 1正常,dalayLevel = 2正常,dalayLevel = 3开始往后都不正常,都不能被消费了。此事确实奇怪,然后就开始网上找答案,终于发现rocketmq还有可以配置的地方,如下:

在这个目录下找到config目录,如图:

仔细看delayOffset.json这个文件,就会发现包含delayLevel的18个等级的offsetId记录,刚好也能解释为什么等级1和2能成功,从3开始,offsetId就错乱了,那么就需要重置offsetId。

方法如下:

第一步:修改broker写权限,让消息不再进来

bin/mqadmin updateBrokerConfig -b broker的IP:broker端口 -n nameServer的IP:端口 -k brokerPermission -v 4

第二步:查看当前流量是不是已经为0

bin/mqadmin clusterList -n broker的IP:broker端口

第三步:停止broker

bin/mqshutdown broker

第四步:

清理掉config下边的delayOffset.json和delayOffset.json.bak文件

第五步:

清理掉consumequeue/SCHEDULE_TOPIC_XXXX目录

第六步:重启broker

第七步:修改broker写权限

bin/mqadmin updateBrokerConfig -b broker的IP:broker端口 -n nameServer的IP:端口 -k brokerPermission -v 6

此时就会发现delayOffset.json变成下边这样了:

好了,大功告成,测试一下,也能正常消费了。

又能愉快玩耍了,不过中间走了一些弯路,因为rocketmq有报错日志storeerror.log里面能直接看出来错误信息。storeerror.log这个文件大家可以全局搜索一下,一般在home目录下。

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值