diff --git a/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRestClientHttpServiceGroupConfigurer.java b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRestClientHttpServiceGroupConfigurer.java index 350bcca9..bcedc405 100644 --- a/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRestClientHttpServiceGroupConfigurer.java +++ b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRestClientHttpServiceGroupConfigurer.java @@ -34,11 +34,10 @@ import static org.springframework.cloud.client.loadbalancer.LoadBalancerUriTools * Load-balancer-specific {@link RestClientHttpServiceGroupConfigurer} implementation. If * the group {@code baseUrl} is {@code null}, sets up a {@code baseUrl} with LoadBalancer * {@code serviceId} -resolved from Interface Client {@code groupName} set as - * {@code host}. If the group {@code baseUrl} is {@code null} or - * {@link LoadBalancerUriTools#isServiceIdUrl(String, String)}, a - * {@link DeferringLoadBalancerInterceptor} instance picked from application context is - * added to the group's {@link RestClient.Builder} if available, allowing for the requests - * to be load-balanced. + * {@code host}. If the group {@code baseUrl} is {@code null} or has {@code lb} set as its + * scheme, a {@link DeferringLoadBalancerInterceptor} instance picked from application + * context is added to the group's {@link RestClient.Builder} if available, allowing for + * the requests to be load-balanced. * * @author Olga Maciaszek-Sharma * @since 5.0.0 @@ -69,23 +68,23 @@ public class LoadBalancerRestClientHttpServiceGroupConfigurer implements RestCli throw new IllegalStateException( DeferringLoadBalancerInterceptor.class.getSimpleName() + " bean not available."); } - groups.configureClient((group, builder) -> { + + groups.forEachGroup((group, clientBuilder, factoryBuilder) -> { String groupName = group.name(); HttpClientServiceProperties.Group groupProperties = clientServiceProperties.getGroup().get(groupName); String baseUrlString = groupProperties == null ? null : groupProperties.getBaseUrl(); URI existingBaseUrl = baseUrlString == null ? null : URI.create(baseUrlString); if (existingBaseUrl == null) { URI baseUrl = constructBaseUrl(groupName); - builder.baseUrl(baseUrl); - builder.requestInterceptor(loadBalancerInterceptor); + clientBuilder.baseUrl(baseUrl); + clientBuilder.requestInterceptor(loadBalancerInterceptor); } else if ("lb".equalsIgnoreCase(existingBaseUrl.getScheme())) { URI baseUrl = UriComponentsBuilder.fromUri(existingBaseUrl).scheme(DEFAULT_SCHEME).build().toUri(); - builder.baseUrl(baseUrl); - builder.requestInterceptor(loadBalancerInterceptor); + clientBuilder.baseUrl(baseUrl); + clientBuilder.requestInterceptor(loadBalancerInterceptor); } }); - } @Override diff --git a/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/reactive/LoadBalancerWebClientHttpServiceGroupConfigurer.java b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/reactive/LoadBalancerWebClientHttpServiceGroupConfigurer.java index 0d42aef8..bba085d9 100644 --- a/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/reactive/LoadBalancerWebClientHttpServiceGroupConfigurer.java +++ b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/reactive/LoadBalancerWebClientHttpServiceGroupConfigurer.java @@ -21,7 +21,6 @@ import java.net.URI; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.http.client.reactive.service.ReactiveHttpClientServiceProperties; import org.springframework.boot.autoconfigure.http.client.service.HttpClientServiceProperties; -import org.springframework.cloud.client.loadbalancer.LoadBalancerUriTools; import org.springframework.util.function.SingletonSupplier; import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.support.WebClientHttpServiceGroupConfigurer; @@ -34,11 +33,10 @@ import static org.springframework.cloud.client.loadbalancer.LoadBalancerUriTools * Load-balancer-specific {@link WebClientHttpServiceGroupConfigurer} implementation. If * the group {@code baseUrl} is {@code null}, sets up a {@code baseUrl} with LoadBalancer * {@code serviceId} -resolved from Interface Client {@code groupName} set as - * {@code host}. If the group {@code baseUrl} is {@code null} or - * {@link LoadBalancerUriTools#isServiceIdUrl(String, String)}, a - * {@link DeferringLoadBalancerExchangeFilterFunction} instance picked from application - * context is added to the group's {@link WebClient.Builder} if available, allowing for - * the requests to be load-balanced. + * {@code host}. If the group {@code baseUrl} is {@code null} or has {@code lb} set as its + * scheme, a {@link DeferringLoadBalancerExchangeFilterFunction} instance picked from + * application context is added to the group's {@link WebClient.Builder} if available, + * allowing for the requests to be load-balanced. * * @author Olga Maciaszek-Sharma * @since 5.0.0 @@ -70,7 +68,7 @@ public class LoadBalancerWebClientHttpServiceGroupConfigurer implements WebClien throw new IllegalStateException( DeferringLoadBalancerExchangeFilterFunction.class.getSimpleName() + " bean not available."); } - groups.configureClient((group, builder) -> { + groups.forEachGroup((group, clientBuilder, factoryBuilder) -> { String groupName = group.name(); ReactiveHttpClientServiceProperties.Group groupProperties = clientServiceProperties.getGroup() .get(groupName); @@ -78,16 +76,16 @@ public class LoadBalancerWebClientHttpServiceGroupConfigurer implements WebClien URI existingBaseUrl = baseUrlString == null ? null : URI.create(baseUrlString); if (existingBaseUrl == null) { URI baseUrl = constructBaseUrl(groupName); - builder.baseUrl(String.valueOf(baseUrl)); - builder.filter(loadBalancerFilterFunction); + clientBuilder.baseUrl(String.valueOf(baseUrl)); + clientBuilder.filter(loadBalancerFilterFunction); } else if ("lb".equalsIgnoreCase(existingBaseUrl.getScheme())) { String baseUrl = UriComponentsBuilder.fromUri(existingBaseUrl) .scheme(DEFAULT_SCHEME) .build() .toUriString(); - builder.baseUrl(baseUrl); - builder.filter(loadBalancerFilterFunction); + clientBuilder.baseUrl(baseUrl); + clientBuilder.filter(loadBalancerFilterFunction); } }); } diff --git a/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRestClientHttpServiceGroupConfigurerTests.java b/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRestClientHttpServiceGroupConfigurerTests.java index 35c0c3c9..a3c7a3b1 100644 --- a/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRestClientHttpServiceGroupConfigurerTests.java +++ b/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRestClientHttpServiceGroupConfigurerTests.java @@ -18,8 +18,6 @@ package org.springframework.cloud.client.loadbalancer; import java.util.HashSet; import java.util.Set; -import java.util.function.BiConsumer; -import java.util.function.Consumer; import java.util.function.Predicate; import org.junit.jupiter.api.BeforeEach; @@ -117,26 +115,20 @@ class LoadBalancerRestClientHttpServiceGroupConfigurerTests { } @Override - public void configureClient(Consumer clientConfigurer) { + public void forEachClient(HttpServiceGroupConfigurer.ForClient configurer) { } @Override - public void configureClient(BiConsumer clientConfigurer) { - clientConfigurer.accept(new TestGroup(GROUP_NAME, HttpServiceGroup.ClientType.REST_CLIENT, new HashSet<>()), - builder); - } - - @Override - public void configureProxyFactory( - BiConsumer proxyFactoryConfigurer) { + public void forEachProxyFactory(HttpServiceGroupConfigurer.ForProxyFactory configurer) { } @Override - public void configure(BiConsumer clientConfigurer, - BiConsumer proxyFactoryConfigurer) { - + public void forEachGroup(HttpServiceGroupConfigurer.ForGroup groupConfigurer) { + groupConfigurer.configureGroup( + new TestGroup(GROUP_NAME, HttpServiceGroup.ClientType.REST_CLIENT, new HashSet<>()), builder, + HttpServiceProxyFactory.builder()); } } diff --git a/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/reactive/LoadBalancerWebClientHttpServiceGroupConfigurerTests.java b/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/reactive/LoadBalancerWebClientHttpServiceGroupConfigurerTests.java index fdff5a92..673ef8f9 100644 --- a/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/reactive/LoadBalancerWebClientHttpServiceGroupConfigurerTests.java +++ b/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/reactive/LoadBalancerWebClientHttpServiceGroupConfigurerTests.java @@ -18,8 +18,6 @@ package org.springframework.cloud.client.loadbalancer.reactive; import java.util.HashSet; import java.util.Set; -import java.util.function.BiConsumer; -import java.util.function.Consumer; import java.util.function.Predicate; import org.junit.jupiter.api.BeforeEach; @@ -107,6 +105,7 @@ class LoadBalancerWebClientHttpServiceGroupConfigurerTests { WebClient.Builder builder = WebClient.builder(); + // @Override public HttpServiceGroupConfigurer.Groups filterByName(String... groupNames) { throw new UnsupportedOperationException("Please, implement me."); @@ -118,26 +117,20 @@ class LoadBalancerWebClientHttpServiceGroupConfigurerTests { } @Override - public void configureClient(Consumer clientConfigurer) { + public void forEachClient(HttpServiceGroupConfigurer.ForClient configurer) { } @Override - public void configureClient(BiConsumer clientConfigurer) { - clientConfigurer.accept(new TestGroup(GROUP_NAME, HttpServiceGroup.ClientType.WEB_CLIENT, new HashSet<>()), - builder); - } - - @Override - public void configureProxyFactory( - BiConsumer proxyFactoryConfigurer) { + public void forEachProxyFactory(HttpServiceGroupConfigurer.ForProxyFactory configurer) { } @Override - public void configure(BiConsumer clientConfigurer, - BiConsumer proxyFactoryConfigurer) { - + public void forEachGroup(HttpServiceGroupConfigurer.ForGroup groupConfigurer) { + groupConfigurer.configureGroup( + new TestGroup(GROUP_NAME, HttpServiceGroup.ClientType.WEB_CLIENT, new HashSet<>()), builder, + HttpServiceProxyFactory.builder()); } }