Spring храбрый создает еще один идентификатор трассировки с помощью WebClient

Я создаю службу Spring-boot3, которая должна взаимодействовать со службой слежения Spring-boot2.

Я настроил приложение Spring-boot3 для распространения идентификаторов трассировки B3 с помощью WebClient. Проблема в том, что WebClient создает другой идентификатор трассировки.

Это конечная точка, которую я выполняю по адресу http://localhost:8080, который, в свою очередь, вызывает http://localhost:9090.

@RestController
@SpringBootApplication
public class MyApplication {

  private static final Log logger = LogFactory.getLog(MyApplication.class);
  @Autowired WebClient.Builder builder;

  @RequestMapping("/")
  String home() {
    logger.info("Testing sending request to client");
    String data = builder
        .baseUrl("http://localhost:9090")
        .exchangeStrategies(ExchangeStrategies.builder().codecs(c ->
            c.defaultCodecs().enableLoggingRequestDetails(true)).build()
        )
        .build()
        .get()
        .exchangeToMono(res -> res.bodyToMono(String.class))
        .block();
    return data;
  }
}

Конфигурация для использования трассировок в стиле B3.

@Configuration
public class Config {
  @Bean
  public Tracing braveTracing() {
    return Tracing.newBuilder()
        .propagationFactory(
            B3Propagation.newFactoryBuilder()
                .injectFormat(B3Propagation.Format.MULTI)
                .build())
        .build();
  }
}

характеристики

spring.application.name=demo
logging.level.org.springframework.web=TRACE
#spring.mvc.log-request-details=true
#spring.http.log-request-details=true

spring.codec.log-request-details=true
management.tracing.propagation.type=B3

logging.level.org.springframework.web.reactive.function.client.ExchangeFunctions=TRACE

management.tracing.enabled = true
management.tracing.sampling.probability = 1.0

Зависимости в build.gradle

implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'io.micrometer:micrometer-tracing-bridge-brave'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
testImplementation 'org.springframework.boot:spring-boot-starter-test'

Наконец, логи, которые я получил:

2024-04-16T15:10:27.010-04:00 TRACE 34890 --- [demo] [nio-8080-exec-1] [121d49ff22764a67                -121d49ff22764a67] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.example.demo.MyApplication#home()
2024-04-16T15:10:27.027-04:00 TRACE 34890 --- [demo] [nio-8080-exec-1] [121d49ff22764a67                -121d49ff22764a67] o.s.web.method.HandlerMethod             : Arguments: []
2024-04-16T15:10:27.028-04:00  INFO 34890 --- [demo] [nio-8080-exec-1] [121d49ff22764a67                -121d49ff22764a67] com.example.demo.MyApplication           : Testing sending request to client
2024-04-16T15:10:27.138-04:00 TRACE 34890 --- [demo] [nio-8080-exec-1] [121d49ff22764a67                -121d49ff22764a67] o.s.w.r.f.client.ExchangeFunctions       : [2f40d44] HTTP GET http://localhost:9090, headers=[X-B3-TraceId:"8089985fbcccddfa", X-B3-SpanId:"8089985fbcccddfa", X-B3-Sampled:"1"]

Идентификатор трассировки в приложении Spring-boot3 — 121d49ff22764a67, а распространяемый — 8089985fbcccddfa. Чего мне не хватает для распространения первого идентификатора трассировки 121d49ff22764a67?

Выполнение HTTP-запроса с помощью Spring WebClient: GET
Выполнение HTTP-запроса с помощью Spring WebClient: GET
WebClient - это реактивный веб-клиент, представленный в Spring 5. Это реактивное, неблокирующее решение, работающее по протоколу HTTP/1.1.
0
0
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Отвечая на мой собственный вопрос.

Не нужно это определять

@Configuration
public class Config {
  @Bean
  public Tracing braveTracing() {
    return Tracing.newBuilder()
        .propagationFactory(
            B3Propagation.newFactoryBuilder()
                .injectFormat(B3Propagation.Format.MULTI)
                .build())
        .build();
  }
}

Чтобы использовать стиль B3, узнаваемый сыщиком Spring Boot 2, просто нужно определить конфигурацию management.tracing.propagation.type=B3_MULTI

Другие вопросы по теме