💬
前言: 生产上最近出了个问题,RocketMQ 的消费者线程,因为某一topic消息挤压,ConsumeMessageThread_* 线程的业务日志会只剩一个,比如原来业务日志打印有 ConsumeMessageThread_1 ConsumeMessageThread_2 ConsumeMessageThread_3 在消费,出现问题时候只有ConsumeMessageThread_1 打印日志了。看起来像是一个消费者把其他消费者也阻塞了。
 
先看下源码,来了解下不同消费者使用的线程名是怎么来的。这里使用的是push并发消费,源码如下。
可以看到,不管起了几个消费者,最后线程名称都是 `ConsumeMessageThread_*` 格式,但是这样在一些场景就没法很直观的区分是哪个消费者了。
 
JVM的线程名称是允许相同的,那要怎样去区分哪个线程是哪个呢?线程id
 
输出结果如下,验证了同名的线程,线程ID是不一样的。
 

📎 参考资料

 
 
PVE虚拟机导出备份导入恢复Java常见HashMap遍历方式性能分析
Loading...