暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

线上问题排查(9)--RocketMQ常见生产问题

架构经纬 2024-11-09
410

【每天5分钟,了解一个知识点】

在使用 RocketMQ 时,常常会遇到一些生产问题。今天就来聊聊这些问题。

一、初始化生产者实例报错

在使用 RocketMQ Spring Boot Starter 或者 RocketMQ Client 时,可能会出现以下报错:

  1. “The producer service state not OK, maybe started once, RUNNING”

    • 排查分析:这种情况一般是同一个实例调用了多次 start 方法导致的。在 Spring 中,要排查在初始化 bean 时是否主动调用了多次 start 方法,或者是否 Spring 和自己的代码都调用了 start。Spring 可以显式调用,也可以注册 bean 的初始化方法。

  2. “The producer service state not OK, maybe started once, SHUTDOWN_ALREADY”

    • 排查分析:通常是因为调用了 shutdown 方法后,又调用了 start。在 RocketMQ 中,producer 和 consumer 的初始化过程是:初始化+start、shutdown。所以 shutdown 后如果要再次使用,需要重新初始化+start,而初始化过程只有在新建实例的时候才做。


二、topic 路由信息获取不到

  1. topic 不存在或者路由信息获取不到

    • 如果获取到的路由信息为空,客户端会报错。可能是 topic 没有创建,导致没有获取到 topic 信息;也可能是 topic 创建的时候通知 Namesrv 失败了,Namesrv 没有保存这个 topic 的路由信息,查询也就返回空。

    • 解决方法:这种情况可以新建 topic 或者删除后新建,实在不行就重启 namesrv 后再删除新建。

    • 从架构图可以看出,Namesrv 内存中的路由信息是 Broker 定期上报的,如果没有上报或者压根儿没有这个 topic,topic 路由不存在就是预期内的。

  2. 发送消息失败

    • 客户端访问 Broker 网络不通:这种情况客户端处理不了,最好找服务维护人员。

    • 发送到 Broker 报错:在确定可以 ping 通 Broker 后,如果 Broker 报错一般会有错误信息,比如超时、broker 磁盘满、broker 同步 slave 失败等,需要根据返回的错误信息排查 Broker 代码。这时把本地“~/logs/rocketmqlogs/rocketmq_client.log”和返回报错信息准备好,交给负责运维 RocketMQ 的同学吧。

【关联阅读】

关注公众号,回复【Java面试】,获取更多面试资料


文章转载自架构经纬,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论