Spring Cloud Reactor Sleuth - не устанавливает MD C с новым идентификатором диапазона при отправке запроса с помощью WebClient - PullRequest
0 голосов
/ 19 июня 2020

Инициализация WebClient

Код для вызова серверной части и инициализации, как показано ниже. В примере кода используется версия Spring-Cloud Hoxton.SR4, org.springframework.boot, версия 2.3.1.RELEASE. Полный образец в https://github.com/malika15/sleuth-resttemplate-webclient-comparison

@EnableAutoConfiguration
@RestController
public class FrontendUsingWebClient {

    @Autowired
    WebClient webClient;
    private Logger log = LoggerFactory.getLogger("FrontendUsingWebClient");

    public static void main(String[] args) {
        SpringApplication.run(FrontendUsingWebClient.class,
            "--spring.application.name=FrontendUsingWebClient",
            "--server.port=8081");
    }

    @Bean
    WebClient webClient() {
        return WebClient.builder().exchangeStrategies(ExchangeStrategies.builder().codecs(c ->
            c.defaultCodecs().enableLoggingRequestDetails(true)).build()
        ).baseUrl("http://localhost:9000").build();
    }

    @RequestMapping("/")
    public Mono<String> callBackend() {
        log.info("Frontend WebClient::Begin");
        Mono<String> response = webClient.get().uri("/api").retrieve().bodyToMono(String.class)
            .doFirst(() -> log.info("Frontend WebClient ::doFirst"))
            .doOnSubscribe(subscription -> log.info("Frontend WebClient::doOnSubscribe"))
            .doOnRequest(value -> log.info("Frontend WebClient::doOnRequest"))
            .doOnSuccess(s -> log.info("Frontend WebClient::doOnSuccess"))
            .doOnEach(stringSignal -> log.info("Frontend WebClient::doOnEach"))
            .doOnNext(s -> log.info("Frontend WebClient::doOnNext"))
            .doAfterTerminate(() -> log.info("Frontend::doAfterTerminate"))
            .doFinally(signalType -> log.info("Frontend WebClient::doFinally"))
            .doOnCancel(() -> log.info("Frontend WebClient::doOnCancel"));
        log.info("Frontend WebClient::End");
        return response;
    }
}

Webclient - новый идентификатор диапазона в заголовках HTTP, но не в MD C

Примечание в ниже, в HTTP-заголовке указано X-B3-SpanId:"e8c842b87aa2c176", а в MD C - d6737613f8c125f7,d6737613f8c125f7. Sleuth запускает новый диапазон для вызова веб-клиента и устанавливает его по запросу заголовков X-B3, но не может установить его в TraceContext (MD C)

2020-06-19 13:55:29.516 TRACE [FrontendUsingWebClient,d6737613f8c125f7,d6737613f8c125f7,false] 14008 --- [ctor-http-nio-3] o.s.w.r.f.client.ExchangeFunctions       : [418bc045] HTTP GET http://localhost:9000/api, headers=[X-B3-TraceId:"d6737613f8c125f7", X-B3-SpanId:"e8c842b87aa2c176", X-B3-ParentSpanId:"d6737613f8c125f7", X-B3-Sampled:"0"]

RestTemplate - новый идентификатор диапазона в HTTP заголовки и в MD C

Обратите внимание, что в выводе журнала ниже новый диапазон создается Starting scope for span: 2d795955f8643a11/79ec6c794e86cd58 и устанавливается на MD C 2d795955f8643a11,79ec6c794e86cd58. Sleuth запускает новый диапазон для вызова RestTemplate и закрывается после получения ответа. Установка его на MD C соответствующим образом

2020-06-19 13:52:15.520 DEBUG [FrontendUsingRestTemplate,2d795955f8643a11,2d795955f8643a11,false] 12564 --- [ctor-http-nio-3] o.s.web.client.RestTemplate              : HTTP GET http://localhost:9000/api
2020-06-19 13:52:15.524 DEBUG [FrontendUsingRestTemplate,2d795955f8643a11,2d795955f8643a11,false] 12564 --- [ctor-http-nio-3] o.s.web.client.RestTemplate              : Accept=[text/plain, application/json, application/*+json, */*]
2020-06-19 13:52:15.525 TRACE [FrontendUsingRestTemplate,2d795955f8643a11,2d795955f8643a11,false] 12564 --- [ctor-http-nio-3] o.s.b.f.s.DefaultListableBeanFactory     : Returning cached instance of singleton bean 'tracingClientHttpRequestInterceptor'
2020-06-19 13:52:15.526 TRACE [FrontendUsingRestTemplate,2d795955f8643a11,79ec6c794e86cd58,false] 12564 --- [ctor-http-nio-3] o.s.c.sleuth.log.Slf4jScopeDecorator     : Starting scope for span: 2d795955f8643a11/79ec6c794e86cd58
2020-06-19 13:52:15.526 TRACE [FrontendUsingRestTemplate,2d795955f8643a11,79ec6c794e86cd58,false] 12564 --- [ctor-http-nio-3] o.s.c.sleuth.log.Slf4jScopeDecorator     : With parent: 3276748429663156753
2020-06-19 13:52:15.526  INFO [FrontendUsingRestTemplate,2d795955f8643a11,79ec6c794e86cd58,false] 12564 --- [ctor-http-nio-3] FrontendUsingRestTemplate                : Frontend RestTemplate::Sending request to Backend http://localhost:9000/api
2020-06-19 13:52:15.533 TRACE [FrontendUsingRestTemplate,2d795955f8643a11,79ec6c794e86cd58,false] 12564 --- [ctor-http-nio-3] s.n.www.protocol.http.HttpURLConnection  : ProxySelector Request for http://localhost:9000/api
2020-06-19 13:52:15.535 TRACE [FrontendUsingRestTemplate,2d795955f8643a11,79ec6c794e86cd58,false] 12564 --- [ctor-http-nio-3] s.n.www.protocol.http.HttpURLConnection  : Proxy used: DIRECT
2020-06-19 13:52:15.536 DEBUG [FrontendUsingRestTemplate,2d795955f8643a11,79ec6c794e86cd58,false] 12564 --- [ctor-http-nio-3] s.n.www.protocol.http.HttpURLConnection  : sun.net.www.MessageHeader@161711d99 pairs: {GET /api HTTP/1.1: null}{Accept: text/plain, application/json, application/*+json, */*}{X-B3-TraceId: 2d795955f8643a11}{X-B3-SpanId: 79ec6c794e86cd58}{X-B3-ParentSpanId: 2d795955f8643a11}{X-B3-Sampled: 0}{User-Agent: Java/11.0.2}{Host: localhost:9000}{Connection: keep-alive}
2020-06-19 13:52:15.766 TRACE [FrontendUsingRestTemplate,2d795955f8643a11,79ec6c794e86cd58,false] 12564 --- [ctor-http-nio-3] s.n.www.protocol.http.HttpURLConnection  : KeepAlive stream used: http://localhost:9000/api
2020-06-19 13:52:15.768 DEBUG [FrontendUsingRestTemplate,2d795955f8643a11,79ec6c794e86cd58,false] 12564 --- [ctor-http-nio-3] s.n.www.protocol.http.HttpURLConnection  : sun.net.www.MessageHeader@1c1638c03 pairs: {null: HTTP/1.1 200 OK}{Content-Type: text/plain;charset=UTF-8}{Content-Length: 39}
2020-06-19 13:52:15.769 TRACE [FrontendUsingRestTemplate,2d795955f8643a11,79ec6c794e86cd58,false] 12564 --- [ctor-http-nio-3] o.s.c.sleuth.log.Slf4jScopeDecorator     : Closing scope for span: 2d795955f8643a11/79ec6c794e86cd58
2020-06-19 13:52:15.771 DEBUG [FrontendUsingRestTemplate,2d795955f8643a11,2d795955f8643a11,false] 12564 --- [ctor-http-nio-3] o.s.web.client.RestTemplate              : Response 200 OK

Ищу идеи о том, как получить диапазон, сгенерированный для вызовов Webclient в MD C, чтобы он отображался в журналах для запроса и ответа

...