李志博
李志博

Reputation: 87

springboot 3.1.6 webflux trace lost

I constructed the web client using the following method.

 @Bean
    public XXXApiService xxxApiClient(HttpClient httpClient, WebClient.Builder builder) {
        WebClient webClient = builder
                .baseUrl("XX")
                .clientConnector(new ReactorClientHttpConnector(httpClient))
                .defaultStatusHandler(
                        httpStatusCode -> HttpStatus.NOT_FOUND == httpStatusCode,
                        response -> Mono.empty())
                .defaultStatusHandler(
                        HttpStatusCode::is5xxServerError,
                        response -> Mono.error(new RuntimeException(response.statusCode().toString())))
                .build();
        return HttpServiceProxyFactory
                .builder(WebClientAdapter.forClient(webClient))
                .build()
                .createClient(XXXApiService.class);
    }

I found that when entering from webflux and directly calling webclient, the trace can be successfully connected.

However, if it is first done in the form of Flux.fromIterable(xx).flatMap(xx -> webClient.xxx), for example. There is no way to connect the entire trace.

So, may I ask how should I go about solving this problem?

Upvotes: 0

Views: 774

Answers (1)

SeverityOne
SeverityOne

Reputation: 2721

See if the first comment to this question helps you. It solved the problem for me.

Micrometer tracing context propagration is lost in webclient flatMap function

When I upgraded to Project Reactor 3.6.0, the tracing was propagated from one WebClient call to the next.

<dependency>
    <groupId>io.projectreactor</groupId>
    <artifactId>reactor-core</artifactId>
    <version>3.6.0</version>
</dependency>

With thanks to user @Trind for providing the solution.

Upvotes: 1

Related Questions