RocketMQ 客户端突然不消费了,部分不消费,部分队列不消费

现象: 

                   短信发送业务发现部分客户不能按时收到短信通知,发现Rocketmq 消息消费有延迟。

定位步骤:

                   查看Rocketmq 控制台,发现topic消费有部分延迟,同一个Client 部分队列能正常消费,但是部分队列消费延迟或者长期不消费。

                    控制台截图如下:

                                   

                   看到这个现象后就怀疑是客户端某个逻辑出现了死循环或者长时间的Block,于是去打印了线上环境的线程栈。

                   命令: jstack pid >> 打印到某个文件

                    

                   根据关键字ConsumeMessageThread 在线程栈里检索MQ消费线程,发现有两个线程长期处于Runnale 状态

                    

                   最终定位到时邮件发送API transport 默认没有超时时间导致的
                   at javax.mail.Transport.send0(Transport.java:168)
                   at javax.mail.Transport.send(Transport.java:98)

解决办法:

   邮件发送服务器设置超时时间,不要一直占用线程不释放

总结: 

当遇到Rocketmq 部分队列不消费的情况,第一时间应该考虑是不是有线程被死循环占用或者被IO等待一直处于Runnable状态。  可以通过打印当前应用线程栈的方式查看线程信息。

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值