【问题标题】:How to get (extract) / set TraceContext from/into tracer in spring sleuth如何在 Spring sleuth 中从/到跟踪器中获取(提取)/设置 TraceContext
【发布时间】:2021-01-12 08:21:23
【问题描述】:

我有一个要求,即不同异步请求的完整流与跨不同服务的一个 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);

【问题讨论】:

    标签: java spring-boot spring-cloud-sleuth zipkin


    【解决方案1】:

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

    跟踪上下文是开箱即用的,因此所有相关的 span 都具有相同的 traceId,请参阅 docs 如何为消息传递设置它,还有一个 sample project for messaging

    【讨论】:

    • 我知道这一点,但是您将如何为不同的 trackingId 更改 traceId 并为跨服务的相同 trackingId 保持相同。
    • 我不确定我是否理解这句话。你说的trackingId是什么意思?有traceId和spanId,没有trackingId。
    • 问题中提到了,我有一个要求,即不同异步请求的完整流程与一个 trackingId 跨不同服务相关,这些服务在消息的帮助下进行异步通信,我需要有一个与一个流或 trackingId 相关的所有请求的单个 traceId。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多