Spring MVC 使用Openzipkin Brave跟踪ForkJoinPool

whitzsjs  于 2023-06-30  发布在  Spring
关注(0)|答案(2)|浏览(134)

我正在尝试将Openzipkin Brave应用到一个应用程序中,以帮助使用Logback进行日志跟踪。该应用程序是一个spring webmvc应用程序,它使用ForkJoinPool。
在主线程(springwebmvc部分)中进行跟踪是可以工作的,但是我在将跟踪上下文传递到ForkJoinThread时遇到了困难。在我的理解中,跟踪上下文存储在threadlocal中,ForkJoinWorkerThread(或ForkJoinTask)显然无法访问该线程。我想知道如何才能让它工作。

lyr7nygr

lyr7nygr1#

了解如何使用ForkJoinWorkerThreadFactory和ForkJoinWorkerThread设计/操作ForkJoinPool,并成为本地Java功能,其中工作线程在Spring Context之外执行。向ForkJoinPool执行添加跟踪的唯一方法是自定义Task本身。
这里是blog在Sping Boot 3x中使用Micrometer添加跟踪到ForkJoinPool Tasks执行。

yfjy0ee7

yfjy0ee72#

**编辑:**我们在回答这个问题时发现,ForkJoinPool目前不适用于Brave。由于类的API限制,我们还无法找到解决方案。

以下假设使用Brave版本5(它可能也适用于4):
CurrentTraceContext API提供了一个方法:executorService,我们可以用它来 Package ExecutorService。因此,您需要执行以下操作:

ForkJoinPool fjp = ...;
    CurrentTraceContext ctc = Tracing.currentTraceContext();
    ExecutorService wrappedExecutorService = ctc.executorService(fjp);

然后,您可以像使用ForkJoinPool一样使用wrappedExecutorService

相关问题