在我的博客阅读本文
文章目录
1. 解决的问题
当一个线程执行过程中开启了新的异步线程,会导致异步线程与当前线程的traceId不一致的问题。
在线程池中,traceId可能在线程创建那一刻就已经固定了,不会跟着使用场景上下文traceId变动,在后面的线程复用环节中一直都是这个traceId,会带来traceId混乱在一起的情况,同样也会带来异步线程与当前线程的traceId不一致的问题。
最终,导致异步线程在日志上无法准确追踪到整个调用链路。
2. 环境
总的来说基于 Zipkin server + Brave library,这一块基本使用需要参考一下文档:
https://zipkin.io/pages/instrumenting.html
https://github.com/openzipkin/brave
3. Brave的currentTraceContext
以MDCCurrentTraceContext作为上下文容器进行初始化方式为例:
var Tracing = Tracing.newBuilder().endpoint(endpoint)
.spanReporter(spanReporter()).currentTraceContext(MDCCurrentTraceContext.create()).build();
当调用tracing#Tracer#nextSpan()
来开启一个新的执行片段(Span&