es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Diferencia entre WebClient.Builder y WebClient.create en WebClient.

He asumido parte del código, donde están usando WebClient.builder().build() para crear el WebClient. En lugar de WebClient.create(). El problema es que no estoy seguro de cómo utilizar el WebClient creado por WebClient.builder().build().
Tengo el siguiente código

import org.springframework.web.reactive.function.client.WebClient;

Boolean flag = webClient.get()
                .uri(url)
                .retrieve()
                .bodyToMono(Boolean.class)
                .block();

Esto funcionará si uso WebClient.create()

Pero al usar build, obtengo la siguiente excepción, por lo que debe haber alguna funcionalidad que me falta para hacer que el WebClient creado por build funcione.

org.springframework.web.reactive.function.client.WebClientResponseException$ServiceUnavailable: 503 Service Unavailable from UNKNOWN 
    at org.springframework.web.reactive.function.client.WebClientResponseException.create(WebClientResponseException.java:207)
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):
    |_ checkpoint ⇢ 503 from GET http://localhost:8084/throttling?paramUrl=https://playwright.dev/ [DefaultWebClient]
Stack trace:
        at org.springframework.web.reactive.function.client.WebClientResponseException.create(WebClientResponseException.java:207)
        at org.springframework.web.reactive.function.client.DefaultClientResponse.lambda$createException$1(DefaultClientResponse.java:206)
        at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:100)
        at reactor.core.publisher.FluxDefaultIfEmpty$DefaultIfEmptySubscriber.onNext(FluxDefaultIfEmpty.java:92)
        at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:121)
        at reactor.core.publisher.FluxContextStart$ContextStartSubscriber.onNext(FluxContextStart.java:96)
        at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:287)
        at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onNext(FluxFilterFuseable.java:330)
        at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1782)
        at reactor.core.publisher.MonoCollect$CollectSubscriber.onComplete(MonoCollect.java:152)
        at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onComplete(FluxMapFuseable.java:144)
        at reactor.core.publisher.FluxJust$WeakScalarSubscription.request(FluxJust.java:101)

Espero que esto sea útil para ti.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Cuando se utiliza WebClient.builder().build(), es necesario especificar algunas opciones de configuración antes de utilizarlo. Por ejemplo, puedes establecer la URL base de tu cliente llamando al método baseUrl() en el constructor. Además, puedes agregar filtros e interceptores al cliente llamando a los métodos filter() e interceptor(), respectivamente.

    Aquí tienes un ejemplo de cómo se utiliza WebClient.builder().build():

    WebClient client = WebClient.builder()
        .baseUrl("http://example.com")
        .build();
    
    Mono<boolean> result = client.get()
        .uri("/api/endpoint")
        .retrieve()
        .bodyToMono(Boolean.class);
    
    Boolean flag = result.block();
    

    En este ejemplo, hemos establecido la URL base de nuestro cliente en “http://example.com”. Luego realizamos una solicitud GET al endpoint “/api/endpoint” utilizando el método client.get().uri(), y recuperamos el cuerpo de la respuesta como un Boolean utilizando bodyToMono(Boolean.class). Finalmente, bloqueamos el resultado para obtener el valor Boolean.

    Es posible que el error 503 Service Unavailable que estás viendo se deba a algo completamente diferente, no relacionado con el uso de WebClient.builder().build(). Es posible que necesites investigar más a fondo la causa del error para determinar su origen.

Comments are closed.