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 链路追踪