测微计追踪brave + 休息模板/网络客户端

Pok*_*kni 2 spring-boot micrometer brave micrometer-tracing

我正在尝试将 TraceId 从一个服务传播到由其余模板/Web 客户端调用的另一个服务

我希望 TraceId 是相同的,但实际上会生成新的。

服务1:

    @Bean
    public WebClient webClient() {
        return WebClient.create("http://localhost:8080");
    }
Run Code Online (Sandbox Code Playgroud)

简单调用 service-2:

webClient.get().retrieve().bodyToMono(String.class).block();
Run Code Online (Sandbox Code Playgroud)

我在这两个服务中都有这些依赖项:

        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-tracing-bridge-brave</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

我使用休息模板得到了相同的行为。根据文档,traceparent标头应该被传播,但事实并非如此。我使用的是 Spring Boot 3.0.5

小智 7

当您从头开始构建 WebClient 时,不会发生自动配置。您应该更改 WebClient bean 方法并注入 WebClient.Builder。

    @Bean
    public WebClient webClient(WebClient.Builder builder) {
        return builder.baseUrl("....").build();
    }
Run Code Online (Sandbox Code Playgroud)