本文作者:suxingrui
本文链接:https://blog.csdn.net/suxingrui/article/details/80206058
版权声明:本文为原创文章,转载请注明出处。
跟踪请求的整个处理链路过程,最方便的就是在线程名中添加traceId(跟踪标识符)或者streamNo(流水号),并打印线程名到日志。
如下图
然而在使用Hystrix实现熔断的时候发现,熔断器使用自己的线程池,不易在线程名中体现出请求的整个处理链路过程。
为了实现这个目的,调查发现可以在FutureTask类的构造函数里插入一行代码。
public FutureTask(Runnable runnable, V result) {
// 在这插入一行代码
// runnable = AgentHandler.prefixThreadName(runnable);
this.callable = Executors.callable(runnable, result);
this.state = NEW; // ensure visibility of callable
}
实现
FutureTaskTransformer
AgentHandler
PrefixThreadName
并在请求的AOP切面中添加
这样就能够到达目的。