Как использовать TraceContext, чтобы установить traceId в Spring Sleuth and Brave? - PullRequest
0 голосов
/ 06 декабря 2018

Мне нужно установить traceId с существующим Id (мы создали какой-то корреляционный идентификатор из основного приложения-источника) в Brave Tracer.

Я не хочу использовать созданный 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' и смелый.Вся цель состоит в том, чтобы искать с использованием correlationId, а не traceId в пользовательском интерфейсе zipkin.

1 Ответ

0 голосов
/ 06 декабря 2018

Вам понадобится ваша собственная реализация PropagationFactory.Вот значение по умолчанию: https://github.com/openzipkin/brave/blob/master/brave/src/main/java/brave/propagation/B3Propagation.java

Вы можете создать бин, и вместо него следует использовать sleuth.

Более конкретно, вам потребуется реализация с пользовательской реализацией TraceContext.Extractor<C>,Затем можно извлечь идентификатор трассировки из вашего заголовка и добавить возвращаемое значение TraceContext.Затем он может передать его, используя обычные заголовки.Если вы хотите использовать тот же заголовок корреляции при отправке в нисходящем направлении, вам также придется реализовать TraceContext.Injector<C>.

...