Я пытаюсь добавить процесс трассировки в устаревший сервис. Вот ситуация, служба A вызывает службу B, служба B вызывает службу C. Устаревшим сервисом, над которым я работаю, является serviceB.
Это не проект загрузки весны / весны. Он получает и обрабатывает запросы с помощью netty, поэтому я добавляю nettyHttpTracing.serverHandler () к каналу Pipeline, как предложено netty-codec-http . Вот код:
Tracing tracing = Tracing.newBuilder().traceId128Bit(true)
.localServiceName(SERVICE_NAME_QA).spanReporter(new TraceReporter()).build();
HttpTracing httpTracing = HttpTracing.create(tracing);
ThreadCache.setHttpTracing(httpTracing);
NettyHttpTracing nettyHttpTracing = NettyHttpTracing.create(httpTracing);
channelPipeline.addLast("tracing", nettyHttpTracing.serverHandler());
До сих пор все отлично работает. Он может читать заголовки HTTP-запросов от serviceA и правильно записывать интервалы. Затем я попытался добавить процесс трассировки к запросам между serviceB и serviceC. Он использует okhttp для отправки запросов. Поэтому я добавил диспетчер и перехватчик в okhttpClient:
HttpTracing httpTracing = ThreadCache.getHttpTracing();
OkHttpClient okhttpClient = new Builder()
.dispatcher(new Dispatcher(
httpTracing.tracing().currentTraceContext()
.executorService(new Dispatcher().executorService())))
.addNetworkInterceptor(TracingInterceptor.create(httpTracing))
.build();
Для этого требуется httpTracing, поэтому я сохранил httpTracing, созданный в процессе Netty, в ThreadLocal и получил его до объявления okhttpClient. Теперь моя проблема в том, что, похоже, Brave всегда создает новый след, когда okhttpClient отправляет запрос. Я сделал что-то не так?