traceId去关联的,但当使用多线程的话,会出现不同线程之间traceId不一致情况,导致无法追踪;CompletableFuture为例,并行请求多个接口,子线程的日志无法通过父线程的traceId追踪,因为traceId是通过线程的ThreadLocal进行存储的,只能够在当前线程获取;Skywalking的SupplierWrapper.of()方法解决: CompletableFuture<List<SysUser>> futureSysUsers = CompletableFuture.supplyAsync(SupplierWrapper.of(() -> {
}), asyncTaskExecutor);
<!--异步链路追踪依赖-->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
</dependency>
brave.propagation.CurrentTraceContext#wrap(java.lang.Runnable)
brave.propagation.CurrentTraceContext#wrap(java.util.concurrent.Callable)
brave.propagation.CurrentTraceContext#executor
brave.propagation.CurrentTraceContext#executorService