и я попытался использовать компоновщик в своем методе обслуживания, потому что изначально думал, что WebClient не является поточно-ориентированным (хотя на самом деле это так). Спасибо!

ел бы иметь http-клиент для вызова другого микросервиса из Spring Bootне реагирует применение. Из-за RestTemplate будет объявлен устаревшим, я попытался использовать WebClient.Builder и WebClient. Хотя я не уверен насчет безопасности потоков. Вот пример:

@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 () в этом примере будет вызываться из нескольких потоков, а webClientBuilder - это единственный экземпляр компонента. Класс WebClient.Builder содержит state: baseUrl, и это, кажется, не является потокобезопасным, поскольку несколько потоков могут одновременно вызывать это обновление состояния. Между тем сам WebClient, кажется, является потокобезопасным, как упоминалось в ответе наПравильный способ использования Spring WebClient в многопоточной среде

Должен ли я использовать bean-компонент WebClient.Builder, как указано вhttps://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-webclient.html

Spring Boot создает и предварительно настраивает WebClient.Builder для вас; Настоятельно рекомендуется внедрить его в ваши компоненты и использовать его для создания экземпляров WebClient.

Один из вариантов обходного пути, который я вижу, - это создание WebClient без какого-либо состояния, передаваемого построителю, поэтому вместо:

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

Я сделаю:

WebClient webClient = webClientBuilder.build();

и передайте полный URL с протоколом и портом в вызове метода uri:

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

Как правильно использовать его в моем случае?

Ответы на вопрос(1)

Ваш ответ на вопрос