Spring勇敢使用WebClient创建另一个traceId

问题描述 投票:0回答:1

我正在创建一个 spring-boot3 服务,需要与 spring-boot2 sleuth 服务交互。

我将 spring-boot3 应用程序配置为使用 WebClient 传播 B3 跟踪 ID。问题是 WebClient 正在创建另一个跟踪 id。

这是我执行 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 应用程序中的跟踪 ID 是

121d49ff22764a67
,传播的跟踪 ID 是
8089985fbcccddfa
。我在传播第一个跟踪 id
121d49ff22764a67
时缺少什么?

webclient trace micrometer propagation spring-boot-3
1个回答
0
投票

回答我自己的问题。

无需定义这个

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

要使用 Spring Boot 2 sleuth 可识别的 B3 风格,只需要定义配置即可

management.tracing.propagation.type=B3_MULTI

© www.soinside.com 2019 - 2024. All rights reserved.