打开 ForkJoinPool.commonPool() 的跟踪工具

Open tracing instrumentation for ForkJoinPool.commonPool()

我的应用程序广泛使用 CompletableFuture.supplyAsync(() -> someService(context, args)); 并且我们依靠 supplyAsync 使用 ForkJoinPool.commonPool() 线程池在其自己的线程中获取服务 运行。

有没有办法在不将自定义 Executor 作为参数传递给 supplyAsync() 的情况下在开放跟踪中检测 someService 调用?我正在使用 spring 和 jaeger 并且具有以下依赖性

        <dependency>
            <groupId>io.opentracing.contrib</groupId>
            <artifactId>opentracing-spring-jaeger-cloud-starter</artifactId>
            <version>3.2.2</version>
        </dependency>       

据我所知,ForkJoinPool.commonPool() 的设计使得无法实际以编程方式用检测版本替换该池。所以唯一的解决方法是通过字节码操作来完成。

OpenTelemetry Java Automatic Instrumentation 库发挥了很多作用,能够通过 async/concurrency 原语正确传播上下文,您可能想尝试一下。