rocketMQ 消息丢失-生产消息发送成功,消费者没消费到消息

消息丢失现场:    

预约成功消息,偶发收不到消息.

1)排查发现rocketmq 生产者 发送到mq成功。

2)消费者没消费到对应消息

 

现场情况分析

分析:rocketMq消息都是有多种可能原因:

1)mq消息异步 刷盘机制, 可以优化为同步刷盘机制

2)mq集群异步复制 , 可以优化为 同步复制机制。

3)mq消息发送失败记录,并做发送重试机制。

4)生产消息的发送机制,做同步发送机制。 (生产发送消息: 同步,异步, oneway)

 

发现排查原因:

猜测可能后,落地实处,需要找到当前问题的原因,有图有真相(有图有日志)。

 安装mq-console 查看topic状态 及consume消费情况:

1)根据生产的messageId 查找消息。 发现在mq可以找到。 明确消息发送成功。

2)消费失败,consume 发现有两个队列  未消费的消息在堆积。

3)消息堆积的 设置topic的 写队列,读队列的配置。

4) opic::rubik-hospital  写队列2 ,读队列4 : 控制堵塞队列不写数据。

5)topic::new-rubik-hospital  写队列2 读队列4, --- 0,1队列有消息进队列,  2 3 队列无消息, 

 但是 消费者还是都是在2,3 队列, 0,1 队列 消息全部堵塞。

 

 关键:consume消费者需要分开:

DefaultMQPushConsumer consumer

        = new DefaultMQPushConsumer("please_rename_unique_group_name_13");
consumer.setNamesrvAddr("10.11.218.245:9876");
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);

consumer.subscribe("TopicTest", "TagA || TagC || TagD");

rocketMQ 消息丢失-生产消息发送成功,消费者没消费到消息_第1张图片

topic: rubik-hospital

rocketMQ 消息丢失-生产消息发送成功,消费者没消费到消息_第2张图片

new-rubik-hospital

rocketMQ 消息丢失-生产消息发送成功,消费者没消费到消息_第3张图片

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(java)