У нас есть микросервисная архитектура, построенная на Spring Boot 2.2, и мы используем Spring Cloud Sleuth для распространения идентификатора трассы.
Однако у нас есть один старый огромный монолит c, созданный с помощью Spring Boot 1.5.2 что он не использует Sleuth (обновление этого монолитного c до Spring Boot 2.x не вариант). Я попытался интегрировать Spring Cloud Sleuth 1.3.5 в это, но он также не генерирует идентификатор трассировки (и не нашел документации об этом).
В настоящее время я закодировал этот фильтр, чтобы зарегистрировать свою транзакцию как альтернативу, но Я не хочу изобретать велосипед:
@Component
public class TransactionLoggingFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
String txnId = ofNullable(request.getHeader(TXN_ID_HEADER))
.orElse(randomUUID().toString().substring(0, 8));
MDC.put(TXN_ID, txnId);
chain.doFilter(request, servletResponse);
MDC.remove(TXN_ID);
}
}
Мне было интересно, как я могу добавить Sleuth и программно создать идентификатор трассировки / диапазона, чтобы он мог беспрепятственно распространяться на другие микросервисы с помощью Spring Boot 2.2.
Более старая документация, которую я нашел о Spring Cloud Sleuth, - это 2.1.6. Итак, я не нашел способа использовать Sleuth с Spring Boot 1.5. Знаете ли вы, совместимо ли оно с ним и как я могу его интегрировать?
Мне не нравится приведенный выше фрагмент, потому что я создаю другой идентификатор трассировки, который не перехватывается Sleuth.