У меня есть фильтр (OncePerRequestFilter), который в основном перехватывает входящий запрос и регистрирует traceId, spanId et c. который работает хорошо, этот фильтр находится в общем модуле, который включен в другие проекты, чтобы избежать включения зависимости пружинного сути во все мои микро-сервисы, поэтому я создал его как библиотеку, потому что любые изменения в библиотеке будут общими ко всем модулям. Теперь я должен добавить новый ключ распространения, который необходимо распространить на все службы через заголовки http, такие как trace и spanId, для этого я извлек текущий диапазон из HttpTracing и добавил к нему ключ багажа (как показано ниже)
Span span = httpTracing.tracing().tracer().currentSpan();
String corelationId =
StringUtils.isEmpty(request.getHeader(CORELATION_ID))
? "n/a"
: request.getHeader(CORELATION_ID);
ExtraFieldPropagation.set(CUSTOM_TRACE_ID_MDC_KEY_NAME, corelationId);
span.annotate("baggage_set");
span.tag(CUSTOM_TRACE_ID_MDC_KEY_NAME, corelationId);
Я добавил ключи распространения и whitelisted-md c -key в мой файл application.yml (с моей библиотекой), как показано ниже
spring:
sleuth:
propagation-keys:
- x-corelationId
log:
slf4j:
whitelisted-mdc-keys:
- x-corelationId
После внесения этого изменения в фильтр corelationId недоступен, когда я выполняю http-вызов другой службе с тем же приложением, в основном ключи не распространяются.