CorlationId распространяется на весенний сыпучий 1.x - PullRequest
0 голосов
/ 23 октября 2018

У меня есть следующие настройки:

Прокси (P) - HTTP -> Приложение Spring Boot 2 (X) - HTTP -> Приложение Spring Boot 1 (Y)

Прокси-сервер отправляет requestId в качестве заголовка HTTP, который мне нужно включить в журналы X и Y.

Для приложения X я легко мог бы сделать это с поддержкой Spring Cloud Sleuth 2, используя

spring: sleuth: propagation-keys: requestId

и создание CurrentTraceContext реализации с вдохновением из Slf4jCurrentTraceContext, где я добавляю

MDC.put("requestId", ExtraFieldPropagation.get(currentSpan, "requestId"));

и тогда я могулегко добавьте его в журналы, используя следующий шаблон журнала:

%d{yy-MM-dd E HH:mm:ss.SSS} %5p [component=${springAppName},requestId=%X{requestId:-}] %m%n"

Но теперь мне нужно распространить requestId также на приложение Y.

К сожалению, я не могу использовать полезности, представленные в Spring Cloud Sleuth 2.0 (например, TraceContext из смелой библиотеки), поскольку это приложение Spring Boot 1.x.

Хотите знать, какие варианты?

Я думал о том, чтобы расширить Slf4jSpanLogger и ввести в DefaultTracer, но не уверен, как получить requestId, в котором нет TraceContext в SpanLogger.

1 Ответ

0 голосов
/ 23 октября 2018

requestId должно быть там в заголовках.Вам придется изменить текущую логику синтаксического анализа заголовков HTTP для Boot 1.x, извлечь это значение из заголовков и поместить его в span.

Однако самый простой способ - передать это значение в качестве багажапричина багаж работает из коробки для Boot 1.x.Таким образом, если мы увидим заголовки с префиксом baggage-, Sleuth 1.3.x автоматически распространит его.Не забудьте внести в белый список багаж в Boot 2.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...