7. 电流跨度
Brave 支持”current span
“概念,代表飞行中的作。
您可以使用Tracer.currentSpan()
将自定义标记添加到 span 和Tracer.nextSpan()
为飞行中的任何东西创建一个子项。
在侦探中,你可以自动连接Tracer bean 通过tracer.currentSpan() 方法。要检索当前上下文,只需调用tracer.currentSpan().context() .获取当前跟踪 ID 作为 String
您可以使用traceIdString() 方法如下:tracer.currentSpan().context().traceIdString() . |
7.1. 手动设置范围内的跨度
编写新检测时,请务必将您在作用域中创建的跨度作为当前跨度放置。
这样做不仅允许用户通过Tracer.currentSpan()
,但它也允许自定义(例如 SLF4J MDC)查看当前跟踪 ID。
Tracer.withSpanInScope(Span)
促进了这一点,并且使用“使用资源尝试”成语最方便。
每当可能调用外部代码(例如继续拦截器或其他方式)时,请将范围置于作用域中,如以下示例所示:
@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
,如以下示例所示:
@Autowired Tracer tracer;
try (SpanInScope cleared = tracer.withSpanInScope(null)) {
startBackgroundThread();
}