Храбрый всегда создает новый след

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

0 ответов

Другие вопросы по тегам