SkyWalking 线程池异步任务链路追踪
SkyWalking 线程池异步任务链路追踪
环境说明
- JDK 版本:1.8
- SkyWalking Agent 版本:8.14.0
- Spring Boot 版本:2.7.11
- 依赖库:
<dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-trace</artifactId> <version>8.10.0</version> </dependency>
异步跟踪支持
Apache SkyWalking 提供了一套包装类来支持编程方式下的异步跟踪。这些包装类可以确保在使用线程池或并行流时,跟踪上下文(如 Trace ID)能够正确地在异步任务之间传播。
包装类名称 | 包装的原始接口 | 应用场景 |
---|---|---|
RunnableWrapper |
Runnable |
当您需要将 Runnable 任务提交给执行器时使用。 |
SupplierWrapper |
Supplier |
在创建一个异步供给型任务时使用,例如 CompletableFuture.supplyAsync 。 |
FunctionWrapper |
Function |
当您需要对流中的元素进行转换操作时使用,适用于并行流。 |
CallableWrapper |
Callable |
当您需要从异步任务中返回结果时使用。 |
ConsumerWrapper |
Consumer |
对流中的每个元素执行操作时使用,适用于并行流。 |
示例代码
线程池中传递 Trace ID
对于线程池,您可以使用 RunnableWrapper
和 CallableWrapper
来包装您的任务,以确保跟踪上下文的正确传播。
import org.apache.skywalking.apm.toolkit.trace.RunnableWrapper;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.