RocketMQ消息状态异常问题排查

MQ一般问题发现的流程是发现消息收不到,然后到控制台去查询消息状态。结果发现可能是XXXX。这里就明确一下消息投递的异常状态,和造成这种异常状态的常见的原因。本文的MQ指的是RocketMQ

消息状态

  • NOT_ONLINE

    订阅端不在线(未启动)

  • CONSUMED

    已消费(正常状态)

  • CONSUMED_BUT_FILTERED

    消息已经被投递且被过滤。(一个消费组能同时订阅多个 tag,但一个消费组的不同消费者不能分开订阅不同的tag,即同一个消费组的订阅关系必须保持一样。)

  • NOT_CONSUME_YET

    暂未消费(尝试多次消费失败)

  • UNKNOWN

    未知状态(原因比较多)

问题场景

  • 走定时任务时同时走MQ导致消息消费失败,查询消息状态为NOT_CONSUME_YET

    原因:跑定时任务的时候机器涉及大量数据库操作占有大量的核心内存资源,导致同时跑MQ的时候机器资源不够用了,导致消息消费多次失败。

  • 修改MQ配置后,再接收消息在控制台发现消息状态为NOT_ONLINE

    原因:要么是订阅端没有启动要么就是订阅端对MQ没有心跳,建议查端口,然后启动一下。

  • 待补充…