Храбрый всегда создает новый след - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь добавить процесс трассировки в устаревший сервис. Вот ситуация, служба 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 отправляет запрос. Я сделал что-то не так?

...