我正在尝试将Openzipkin Brave应用于应用程序以使用Logback帮助记录跟踪。该应用程序是一个spring webmvc应用程序,它使用ForkJoinPool。
跟踪主线程(spring webmvc部分)是有效的,但是我很难将跟踪上下文传递给ForkJoinThread。根据我的理解,跟踪上下文存储在threadlocal中,而ForkJoinWorkerThread(或ForkJoinTask)显然无法访问它。我想知道我怎么能让它发挥作用。
编辑:我们在回答这个问题时发现,ForkJoinPool
目前与Brave无法合作。由于课堂上的API限制,我们还无法找到解决方案。
以下假设使用Brave版本5(它也可能适用于4):
CurrentTraceContext
API为我们提供了一种方法:executorService
,我们可以用来包装ExecutorService
。所以你需要做类似以下的事情:
ForkJoinPool fjp = ...; CurrentTraceContext ctc = Tracing.currentTraceContext(); ExecutorService wrappedExecutorService = ctc.executorService(fjp);
然后在使用wrappedExecutorService
时使用ForkJoinPool