在spring cloud sleuth中保持对completablefuture的跟踪/span

tct7dpnv  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(458)

我在用侦探和 CompletableFuture.handle . 例子:

log.info("first");
apnsClient.sendNotification(...).handle((response, cause) -> {
     log.info("second");
});

我想要那个 second 日志的跟踪id与 first 日志。然而,事实并非如此。所以我想知道该怎么办?谢谢!
p、 我无法控制 apnsClient.sendNotification 管理线程(因为它来自pushy),所以没有办法使用lazytraceexecutor之类的东西。

pdkcd3nj

pdkcd3nj1#

您可以做的是检索范围(例如,通过 tracer.currentSpan() )之前 log.info("first") ,将跨度传递给lambda log.info("second") 并通过手动继续跟踪 tracer.withSpanInScope(span) . 它是这样的:

Span span = tracer.currentSpan();
log.info("first");
apnsClient.sendNotification(...).handle((response, cause) -> {
     try (SpanInScope ws = tracer.withSpanInScope(span)) {
         log.info("second");
     }
});

相关问题