Использование перехватчиков сервера grpc для вызовов вложенных серверов - PullRequest
0 голосов
/ 09 января 2019

У меня есть клиент, который вызывает сервис grpc A, который вызывает другой сервис grpc B. Я хочу использовать ServerInterceptor реализаций для захвата всей трассировки вызовов под корневым диапазоном (уровень 1), начиная с клиента и Служба A в качестве дочернего диапазона (уровень 2) и Служба B в качестве дочернего диапазона следующего уровня (на уровне 3), например:

Client Span
   |
   |__ Server A Span
              |
              |__ Server B Span

Я хотел бы использовать для этой цели клиентские и серверные перехватчики, поскольку я могу отслеживать все вызовы методов без явной обработки всего кода продукта. Итак, мне нужно было бы вставить контекст span с родительским span при выполнении каждого дочернего вызова, чтобы перехватчик на дочернем уровне мог извлечь и использовать его как родительский span при создании своего собственного span.

Так как мне нужно объявить и передать все перехватчики при запуске сервера, как показано здесь , эти перехватчики не взаимодействуют друг с другом. В таком случае, как мне динамически внедрить контекст диапазона на каждом уровне? Есть ли способ добавить ServerInterceptor в запущенную службу при перехвате другого вызова?

Другими словами, как я могу распространять контексты между службами, которые отслеживаются с использованием отдельных перехватчиков трассировки сервера?

Вот как я добавляю перехватчики:

server = ServerBuilder.forPort(port)
.addService(ServerInterceptors.intercept(service, someInterceptor,
    someOtherInterceptor, serverTracingInterceptor))
.build()
.start();

Я пытаюсь создать перехватчики трассировки сервера и клиента, подобные этим: ServerTracingInterceptor.java , ClientTracingInterceptor.java .

Если это невозможно, не могли бы вы предложить альтернативные подходы?

Спасибо!

1 Ответ

0 голосов
/ 11 января 2019

Это определенно ошибка. Пожалуйста, отправьте вопрос против opentracing java-grpc

...