Spring sleuth и spring integration генерируют один и тот же идентификатор трассировки для всех исходящих запросов API

#spring-boot #spring-integration #resttemplate #spring-cloud-sleuth #zipkin

#spring-boot #spring-интеграция #resttemplate #spring-cloud-sleuth #zipkin

Вопрос:

Я создаю приложение springboot, которое также использует spring integration и spring sleuth. Приложение считывает данные из файла csv, и для каждой записи в файле csv выполняется вызов API с использованием spring resttemplate. Каждый раз, когда файл считывается, все соответствующие вызовы API имеют один и тот же X-B3-traceId. У них другой spanId.

Я хотел бы иметь разные X-B3-traceId для каждого вызова API. Я считаю, что интеграция spring устанавливает traceId для каждой операции чтения файла и использует его повсюду во время каждого вызова API.

 @Bean
public IntegrationFlow bridgeFlow() {
    return IntegrationFlows.from(ABC_SERVICE_QUEUE_CHANNEL)
            .bridge(e -> e.poller(Pollers.fixedDelay(period).maxMessagesPerPoll(MAX_MSG_PER_POLL)))
            .handle(someService, "someMethod")
            .route(router())               
            .get();
}
 

«someMethod» вызывает API с использованием resttemplate как,

 ResponseEntity<String> response = restTemplate.exchange(someUrl, HttpMethod.POST, requestEntity, String.class);
 

Я попытался вручную установить заголовки X-B3-traceId, но, похоже, они переопределяются

Комментарии:

1. какую версию Sleuth вы используете?

Ответ №1:

Если вы хотите переопределить какой-либо заголовок своим собственным значением, вам следует использовать что-то подобное в вашем IntegrationFlow :

 .enrichHeaders(s -> s.header("X-B3-TraceId", "some_value", true))
 

Здесь важно установить значение последнего аргумента true .
Посмотрите его JavaDocs:

 @param overwrite true to overwrite an existing header.
 

С другой стороны, из вашего фрагмента кода неясно, как этот X-B3-TraceId заголовок вообще появляется в сообщении. Кто устанавливает его для нас? А где ваш файловый ридер и разделитель для записей в нем?