在 Brave vs. Sleuth 中设置 Span 的跟踪 ID

Setting a Span's trace id in Brave vs. Sleuth

我正在寻找在 Brave 中为 Span 设置跟踪 ID 的正确方法。 Pre-Brave 我们有:

Span span = Span.builder().traceId(someLong).build();

勇敢的等价物是什么?我有以下内容,但显然不正确,因为无法显式设置 Span 的上下文。

Span span = tracer.nextSpan().start();
span.context().toBuilder().traceId(someLong).build();

你可以这样做brave.Span span = tracer.nextSpan().name("name").traceId(someLong).start();

或更进一步

brave.Span span = tracer.nextSpan().name("name").traceId(someLong);
try (SpanInScope ws = tracer.withSpanInScope(span.start())) {
  // do sth
} finally {
  span.finish();
}

查看 spring cloud sleuth migration guide 以了解所有变化

您可以使用 TraceContext Builder 来设置您自己的 TraceId。

    TraceContext traceContext = TraceContext.newBuilder().traceId(traceId).build();
    Span span =
            this.tracing.tracer()
                    .toSpan(traceContext)
                    .name("application.name"))
                    .start();

虽然这是可选的;您可以在创建新 Span 时让 Tracer 生成自己的 traceId :-

this.tracing.tracer().nextSpan().name("application.name").start();

我们可以先建立 TraceContext 然后我们可以用它来创建 TraceContextOrSamplingFlags 然后可以用来创建 Span 如下:

TraceContext traceContext = TraceContext.newBuilder()
                            .traceId(someTraceId)
                            .spanId(someSpanId)
                            .build();

Span span = tracer.nextSpan(TraceContextOrSamplingFlags.create(traceContext))
                            .name(someName).start();