From 02fb33a67b5375d37edf76202b85792eda918aa8 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Thu, 17 Oct 2024 15:29:23 +0200 Subject: [PATCH] Document using configurers and customisers with @LoadBalanced HTTP client builders. Fixes gh-1407. --- .../common-abstractions.adoc | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/docs/modules/ROOT/pages/spring-cloud-commons/common-abstractions.adoc b/docs/modules/ROOT/pages/spring-cloud-commons/common-abstractions.adoc index c8a0f336..a50b6f3f 100644 --- a/docs/modules/ROOT/pages/spring-cloud-commons/common-abstractions.adoc +++ b/docs/modules/ROOT/pages/spring-cloud-commons/common-abstractions.adoc @@ -250,6 +250,22 @@ public class MyClass { The URI needs to use a virtual host name (that is, a service name, not a host name). The `BlockingLoadBalancerClient` is used to create a full physical address. +In order to leverage additional capabilities that Spring Boot provides for `RestClient.Builder` (for example, observability support) you may want to use the autoconfigured +`RestClientBuilderConfigurer` while creating the `@LoadBalanced RestClient.Builder` beans: + +[source,java,indent=0] +---- +@Configuration +public class MyConfiguration { + + @LoadBalanced + @Bean + RestClient.Builder restClientBuilder(RestClientBuilderConfigurer configurer) { + return configurer.configure(RestClient.builder()); + } +} +---- + IMPORTANT: To use it, add xref:spring-cloud-commons/loadbalancer.adoc#spring-cloud-loadbalancer-starter[Spring Cloud LoadBalancer starter] to your project. [[multiple-restclient-objects]] @@ -330,6 +346,24 @@ public class MyClass { The URI needs to use a virtual host name (that is, a service name, not a host name). The Spring Cloud LoadBalancer is used to create a full physical address. +In order to leverage additional capabilities that Spring Boot provides for `WebClient.Builder` (for example, observability support) you may want to use the autoconfigured +`WebClientCustomizer` beans while creating the `@LoadBalanced WebClient.Builder` beans: + +[source,java,indent=0] +---- +@Configuration +public class MyConfiguration { + + @Bean + @LoadBalanced + public WebClient.Builder loadBalancedWebClientBuilder(ObjectProvider customizerProvider) { + WebClient.Builder builder = WebClient.builder(); + customizerProvider.orderedStream().forEach((customizer) -> customizer.customize(builder)); + return builder; + } +} +---- + IMPORTANT: If you want to use a `@LoadBalanced WebClient.Builder`, you need to have a Spring Cloud LoadBalancer implementation in the classpath. We recommend that you add the xref:spring-cloud-commons/loadbalancer.adoc#spring-cloud-loadbalancer-starter[Spring Cloud LoadBalancer starter] to your project.