skywalking 跨线程追踪链路

需求

在skywalking的使用中,对于使用executorService中的多线程中的场景通常会失效,导致无法追中链路

解决方案

增加依赖

  <dependency>
     <groupId>org.apache.skywalking</groupId>
     <artifactId>apm-toolkit-trace</artifactId>
     <version>${skywalking.version}</version>
  </dependency>
代码依赖
  1. 使用1
 @TraceCrossThread
 public static class MyCallable<String> implements Callable<String> {
     @Override
     public String call() throws Exception {
         return null;
     }
 }
...
 ExecutorService executorService = Executors.newFixedThreadPool(1);
 executorService.submit(new MyCallable());
  1. 使用2
 ExecutorService executorService = Executors.newFixedThreadPool(1);
 executorService.submit(CallableWrapper.of(new Callable<String>() {
     @Override public String call() throws Exception {
         return null;
     }
 }));

或者

ExecutorService executorService = Executors.newFixedThreadPool(1);
 executorService.execute(RunnableWrapper.of(new Runnable() {
     @Override public void run() {
         //your code
     }
 }));
  1. 使用3
 @TraceCrossThread
 public class MySupplier<String> implements Supplier<String> {
     @Override
     public String get() {
         return null;
     }
 }
...
 CompletableFuture.supplyAsync(new MySupplier<String>());

或者

  CompletableFuture.supplyAsync(SupplierWrapper.of(()->{
           return "SupplierWrapper";
   })).thenAccept(System.out::println);
  1. 使用4
 CompletableFuture.supplyAsync(SupplierWrapper.of(() -> {
       return "SupplierWrapper";
   })).thenAcceptAsync(ConsumerWrapper.of(c -> {
       // your code visit(url)
       System.out.println("ConsumerWrapper");
   }));

或者

CompletableFuture.supplyAsync(SupplierWrapper.of(() -> {
       return "SupplierWrapper";
   })).thenApplyAsync(FunctionWrapper.of(f -> {
       // your code visit(url)
       return "FunctionWrapper";
   }));
参考
  1. trace cross thread
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值