我正在尝试将Openzipkin Brave应用到一个应用程序中,以帮助使用Logback进行日志跟踪。该应用程序是一个spring webmvc应用程序,它使用ForkJoinPool。
在主线程(springwebmvc部分)中进行跟踪是可以工作的,但是我在将跟踪上下文传递到ForkJoinThread时遇到了困难。在我的理解中,跟踪上下文存储在threadlocal中,ForkJoinWorkerThread(或ForkJoinTask)显然无法访问该线程。我想知道如何才能让它工作。
我正在尝试将Openzipkin Brave应用到一个应用程序中,以帮助使用Logback进行日志跟踪。该应用程序是一个spring webmvc应用程序,它使用ForkJoinPool。
在主线程(springwebmvc部分)中进行跟踪是可以工作的,但是我在将跟踪上下文传递到ForkJoinThread时遇到了困难。在我的理解中,跟踪上下文存储在threadlocal中,ForkJoinWorkerThread(或ForkJoinTask)显然无法访问该线程。我想知道如何才能让它工作。
2条答案
按热度按时间lyr7nygr1#
了解如何使用ForkJoinWorkerThreadFactory和ForkJoinWorkerThread设计/操作ForkJoinPool,并成为本地Java功能,其中工作线程在Spring Context之外执行。向ForkJoinPool执行添加跟踪的唯一方法是自定义Task本身。
这里是blog在Sping Boot 3x中使用Micrometer添加跟踪到ForkJoinPool Tasks执行。
yfjy0ee72#
**编辑:**我们在回答这个问题时发现,
ForkJoinPool
目前不适用于Brave。由于类的API限制,我们还无法找到解决方案。以下假设使用Brave版本5(它可能也适用于4):
CurrentTraceContext
API提供了一个方法:executorService
,我们可以用它来 PackageExecutorService
。因此,您需要执行以下操作:然后,您可以像使用
ForkJoinPool
一样使用wrappedExecutorService