У меня есть фильтр (OncePerRequestFilter), который в основном перехватывает входящий запрос и регистрирует traceId, spanId и т. Д., Который хорошо работает, этот фильтр находится в общем модуле, который включен в другие проекты, чтобы избежать включения зависимости от Spring Sleuth во всех моих микросервисах. , причина, по которой я создал ее как библиотеку, потому что любые изменения в библиотеке будут общими для всех модулей. Теперь я должен добавить новый ключ распространения, который необходимо распространить на все службы через заголовки 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);
Я добавил ключи распространения и ключи из белого списка в свой файл application.yml (с моей библиотекой), как показано ниже
spring:
sleuth:
propagation-keys:
- x-corelationId
log:
slf4j:
whitelisted-mdc-keys:
- x-corelationId
После внесения этого изменения в фильтр corelationId недоступен, когда я делаю http-вызов другой службы с тем же приложением, в основном ключи не распространяются.