7. 电流跨度
Brave 支持表示正在进行的操作的 “” 概念。
你可以使用 将自定义标签添加到 span 中,并创建任何正在进行的子项。current span
Tracer.currentSpan()
Tracer.nextSpan()
在 Sleuth 中,你可以自动装配 bean 以通过 method 检索当前 span。要检索当前上下文,只需调用 .以 String 形式获取当前跟踪 ID
您可以使用如下方法: .Tracer tracer.currentSpan() tracer.currentSpan().context() traceIdString() tracer.currentSpan().context().traceIdString() |
7.1. 在范围内手动设置 span
编写新插桩时,请务必将您在 scope 中创建的 span 作为当前 span。
这样做不仅允许用户使用 访问它,还允许自定义(如 SLF4J MDC)查看当前跟踪 ID。Tracer.currentSpan()
Tracer.withSpanInScope(Span)
有助于实现这一点,并且使用 try-with-resources 惯用语是最方便的。
每当可能调用外部代码(例如继续侦听器或其他方式)时,请将 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();
}