首页 > 解决方案 > 如何在 Spring sleuth 中从/到跟踪器中获取(提取)/设置 TraceContext

问题描述

我有一个要求,其中不同异步请求的完整流与跨不同服务的一个 trackingId 相关,这些服务在消息的帮助下进行异步通信,并且我需要为与一个流或 trackingId 相关的所有请求提供一个 traceId。

我遇到了从/进入 Tracer 获取/设置 TraceContext 的问题,我在下面编写了代码,但它为每个请求创建了一个新的 traceId。

TraceContext traceContext = (TraceContext) contextMap.get(trackingId);
if (traceContext == null)
{
    tracing.tracer().startScopedSpan(trackingId);
    traceContext = tracing.currentTraceContext().get();
} else
{
    tracing.tracer().startScopedSpanWithParent(trackingId, traceContext);
}

contextMap.put(trackingId, traceContext);

标签: javaspring-bootspring-cloud-sleuthzipkin

解决方案


我不是 100% 确定你想在这里实现什么,据我所知,你描述的是默认行为,请参阅文档

跟踪上下文是开箱即用的,因此所有相关的 span 都具有相同的 traceId,请参阅文档如何为消息传递设置它,还有一个用于消息传递的示例项目


推荐阅读