Sleuth
依赖版本
-
Spring cloud 版本是
Hoxton.SR10
-
Spring boot 版本是
2.3.10.RELEASE
-
依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency>
Sleuth 应用配置
-
扩展配置 对应类
SleuthBaggageProperties
spring: sleuth: baggage: remoteFields: - uid - uname - x-b3-uage correlationFields: - uid localFields: - uid
-
remoteFields
代表是远程属性该属性会进入系统时填充,出系统时携带出去-
比如:
Servlet
容器-
在进系统时
brave.servlet.TracingFilter
过滤器拦截处理-
reactor
实现入口org.springframework.cloud.sleuth.instrument.web.TraceWebFilter
-
-
-
比如:
Feign
框架-
在出系统时
org.springframework.cloud.sleuth.instrument.web.client.feign.TracingFeignClient
通过代理拦截处理
-
-
-
correlationFields
-
比如:
org.slf4j.MDC#getCopyOfContextMap
-
-
localFields
只用于本地
-
Sleuth 扩展应用
Rpc 示例
-
接受请求时
RpcServerHandler rpcServerHandler = RpcServerHandler.create(RpcTracing.create(tracing)); RpcServerRequest request = new RpcServerRequest(){ @Override public Object unwrap() { return null; } @Override public String method() { return null; } @Override public String service() { return null; } }; Span span = rpcServerHandler.handleReceive(request); Scope scope = tracing.currentTraceContext().newScope(span.context()); // 业务逻辑 scope.close();
-
发起请求时
RpcClientHandler rpcClientHandler = RpcClientHandler.create(RpcTracing.create(tracing)); RpcClientRequest rpcClientRequest = new RpcClientRequest() { @Override public String method() { return null; } @Override public String service() { return null; } @Override public Object unwrap() { return null; } @Override protected void propagationField(String keyName, String value) { super.propagationField(keyName, value); } }; span = rpcClientHandler.handleSend(rpcClientRequest); scope = tracing.currentTraceContext().newScope(span.context()); // 业务逻辑 scope.close();
异步示例
-
自定义线程池
@Bean("DefaultTaskExecutor") public AsyncTaskExecutor asyncExecutor(Tracing tracing, SpanNamer spanNamer) { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setTaskDecorator(new DefaultTaskDecorator(tracing,spanNamer)); executor.setCorePoolSize(1); executor.setMaxPoolSize(2); executor.setWaitForTasksToCompleteOnShutdown(true); executor.setThreadNamePrefix("sleuth-"); executor.initialize(); return executor; }
-
自定义线程池之前传递处理适配
public class DefaultTaskDecorator implements TaskDecorator { private final Tracing tracing; private final SpanNamer spanNamer; public DefaultTaskDecorator(Tracing tracing, SpanNamer spanNamer) { this.tracing = tracing; this.spanNamer = spanNamer; } @Override public Runnable decorate(Runnable runnable) { return new TraceRunnable(tracing,spanNamer,runnable); } }
org.springframework.cloud.sleuth.instrument.async.TraceRunnable