7. 电流跨度

Brave 支持”current span“概念,代表飞行中的作。 您可以使用Tracer.currentSpan()将自定义标记添加到 span 和Tracer.nextSpan()为飞行中的任何东西创建一个子项。spring-doc.cadn.net.cn

在侦探中,你可以自动连接Tracerbean 通过tracer.currentSpan()方法。要检索当前上下文,只需调用tracer.currentSpan().context().获取当前跟踪 ID 作为 String 您可以使用traceIdString()方法如下:tracer.currentSpan().context().traceIdString().

7.1. 手动设置范围内的跨度

编写新检测时,请务必将您在作用域中创建的跨度作为当前跨度放置。 这样做不仅允许用户通过Tracer.currentSpan(),但它也允许自定义(例如 SLF4J MDC)查看当前跟踪 ID。spring-doc.cadn.net.cn

Tracer.withSpanInScope(Span)促进了这一点,并且使用“使用资源尝试”成语最方便。 每当可能调用外部代码(例如继续拦截器或其他方式)时,请将范围置于作用域中,如以下示例所示:spring-doc.cadn.net.cn

@Autowired Tracer tracer;

try (SpanInScope ws = tracer.withSpanInScope(span)) {
  return inboundRequest.invoke();
} finally { // note the scope is independent of the span
  span.finish();
}

在边缘情况下,您可能需要暂时清除当前范围(例如,启动不应与当前请求关联的任务)。要执行 tso,请将 null 传递给withSpanInScope,如以下示例所示:spring-doc.cadn.net.cn

@Autowired Tracer tracer;

try (SpanInScope cleared = tracer.withSpanInScope(null)) {
  startBackgroundThread();
}