Spring Boot Uso do bean WebClient.Builder no aplicativo multithread tradicional do servlet

Gostaria de ter um cliente http para chamar outro microsserviço do Spring Bootnot reactive aplicativo. Por causa do RestTemplate será preterido, tentei usar o WebClient.Builder e o WebClient. Embora eu não tenha certeza sobre a segurança dos fios. Aqui exemplo:

@Service
public class MyService{
    @Autowired
    WebClient.Builder webClientBuilder;

    public VenueDTO serviceMethod(){
        //!!! This is not thread safe !!!
        WebClient webClient = webClientBuilder.baseUrl("http://localhost:8000").build();

        VenueDTO venueDTO = webClient.get().uri("/api/venue/{id}", bodDTO.getBusinessOutletId()).
                retrieve().bodyToMono(VenueDTO.class).
                blockOptional(Duration.ofMillis(1000)).
                orElseThrow(() -> new BadRequestException(venueNotFound));
                return VenueDTO;
    }
}

serviceMethod () neste exemplo será chamado a partir de poucos threads, e webClientBuilder é uma instância de bean único. A classe WebClient.Builder contém state: baseUrl e isso parece não ser seguro para threads, pois poucos threads poderiam chamar essa atualização de estado simultaneamente. Enquanto isso, o próprio WebClient parece ser seguro para threads, como mencionado na resposta emaneira correta de usar o Spring WebClient em ambientes com vários threads

Devo usar o WebClient.Builder bean como mencionado emhttps: //docs.spring.io/spring-boot/docs/current/reference/html/boot-features-webclient.htm

@Spring Boot cria e pré-configura um WebClient.Builder para você; é altamente recomendável injetá-lo em seus componentes e usá-lo para criar instâncias do WebClien

Uma das opções de solução alternativa que vejo é criar o WebClient sem que nenhum estado seja passado para o construtor, em vez de:

WebClient webClient = webClientBuilder.baseUrl("http://localhost:8000").build();

Eu farei

WebClient webClient = webClientBuilder.build();

e passar URL completo com protocolo e porta na chamada de método uri:

webClient.get().uri("full url here", MyDTO.class)

Qual é a maneira correta de usá-lo no meu caso?

questionAnswers(1)

yourAnswerToTheQuestion