如何使用TraceContext在Spring Sleuth中设置traceId并勇敢?

时间:2018-12-06 14:29:15

标签: spring-cloud zipkin brave

我需要将具有现有ID(我们已经从主要起源应用程序创建了某种相关ID)的traceId设置为勇敢的示踪剂。

我不想使用Spring Sleuth / brave创建的那个,因为我想让它在我的各种微服务中保持一致。我能够创建跟踪和跨度,并且能够将所有详细信息发送到Zipkin。我的示例代码段:

import brave.Span;
import brave.Span.Kind;
import brave.Tracer;
import brave.propagation.TraceContext;  

span = this.tracer.nextSpan().name("myservice");
span.kind(Kind.SERVER);
span.tag("path", servletPath).start();

我正在使用:Spring Cloud“ Greenwich.BUILD-SNAPSHOT”,很勇敢。整个目的是使用zipkin ui中的correlationId而不是traceId进行搜索。

1 个答案:

答案 0 :(得分:0)

您将需要自己的PropagationFactory实现。这是默认值:https://github.com/openzipkin/brave/blob/master/brave/src/main/java/brave/propagation/B3Propagation.java

您可以创建一个bean,sleuth应该使用它而不是这个。

更具体地说,您将需要一个带有自定义TraceContext.Extractor<C>实现的实现。然后可以从您的标头中提取跟踪ID,并添加返回适当的TraceContext。然后,它可以使用常规头将其传递。如果要在向下游发送时使用相同的相关标头,则还必须实现TraceContext.Injector<C>