1. 首页
  2. 编程语言
  3. Java
  4. spring-cloud Sleuth的使用方法

spring-cloud Sleuth的使用方法

上传者: 2022-01-03 07:11:47上传 PDF文件 100.06 KB 热度 9次

一直没弄明白sleuth的tracerContext是如何创建和传递的,闲来无事研究了一下。由于对sleuth的源码不熟悉,准备通过debug brave.Tracer的nextId()方法,查看方法调用栈来找来龙去脉。首先创建两个service A和B,记作srvA、srvB,在srvA中添加testA controller,sevB中添加testB controller,testA中通过Feign调用testB。先看当用户通过浏览器调用srvA的时候,srvA是作为server的。配置中,TracingFilter在实例化时需要一个HttpTracing:HttpTracing Builder模式构造时接收一个Tracing:Tracing实例化:下面看TracingFilter的doFilter:在SleuthLogAutoConfiguration中如果有slfj的包,则注入CurrentTraceContext:Slf4jCurrentTraceContext中,delegate就是CurrentTraceContext.Default.inheritable():Slf4jCurrentTraceContext的delegate使用的就是一个InheritableThreadLocal,InheritableThreadLocal在创建子线程的时候,会将父线程的inheritableThreadLocals继承下来。这样就实现了TraceContext在父子线程中的传递。

用户评论