Spring Cloud Sleuth - 获取当前的 traceId?

Posted

技术标签:

【中文标题】Spring Cloud Sleuth - 获取当前的 traceId?【英文标题】:Spring Cloud Sleuth- Get current traceId? 【发布时间】:2019-12-17 00:31:55 【问题描述】:

我正在使用 Sleuth,我想知道是否可以获取当前的 traceId? 我不需要添加任何响应或任何东西。我只想要在某些情况下提醒开发团队的电子邮件的 traceId。

【问题讨论】:

【参考方案1】:

注入跟踪器 bean 并调用 currentSpan() 以获取当前跨度。从那里您可以获取跟踪 ID。

【讨论】:

【参考方案2】:

import brave.Span;
import brave.Tracer;

@Service
public class TraceService 

    Tracer tracer;

    public TraceService(Tracer tracer) 
        this.tracer = tracer;
    

    public void printTraceId() 
        Span span = tracer.currentSpan();
        String traceId = span.context().traceIdString();
        System.out.println(traceId);
    


【讨论】:

【参考方案3】:

如果当前没有正在进行的跟踪,tracer.currentSpan() 将返回 null,因此 tracer.currentSpan().context() 将抛出 NPE。如果您不确定是否存在当前跟踪并且想要创建一个(如果不存在),您应该使用

var span = tracer.startScopedSpan("fancyTitle");
try 
    var traceId = span.context().traceIdString();
    // use traceId ...
 finally 
    span.finish(); // clean up after yourself

请注意,这将在现有跟踪中创建一个新跨度,即始终生成一个新的spanId

【讨论】:

以上是关于Spring Cloud Sleuth - 获取当前的 traceId?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Alibaba(15)---Sleuth+Zipkin

Spring Cloud:分布式链路跟踪 Sleuth 与 ZipkinFinchley 版

Spring Cloud Sleuth + zipkin 实现服务追踪

Spring Cloud 使用sleuth&zipkin 链路追踪

Spring Cloud全链路追踪实现(Sleuth+Zipkin+RabbitMQ+ES+Kibana)

spring-cloud-sleuth 与 spring-amqp 集成