Adjust to changes in FW. Fix javadocs.

Signed-off-by: Olga Maciaszek-Sharma <olga.maciaszek-sharma@broadcom.com>
This commit is contained in:
Olga Maciaszek-Sharma
2025-05-20 17:29:28 +02:00
parent 1658768307
commit e764074482
4 changed files with 32 additions and 50 deletions

View File

@@ -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

View File

@@ -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);
}
});
}

View File

@@ -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<RestClient.Builder> clientConfigurer) {
public void forEachClient(HttpServiceGroupConfigurer.ForClient<RestClient.Builder> configurer) {
}
@Override
public void configureClient(BiConsumer<HttpServiceGroup, RestClient.Builder> clientConfigurer) {
clientConfigurer.accept(new TestGroup(GROUP_NAME, HttpServiceGroup.ClientType.REST_CLIENT, new HashSet<>()),
builder);
}
@Override
public void configureProxyFactory(
BiConsumer<HttpServiceGroup, HttpServiceProxyFactory.Builder> proxyFactoryConfigurer) {
public void forEachProxyFactory(HttpServiceGroupConfigurer.ForProxyFactory configurer) {
}
@Override
public void configure(BiConsumer<HttpServiceGroup, RestClient.Builder> clientConfigurer,
BiConsumer<HttpServiceGroup, HttpServiceProxyFactory.Builder> proxyFactoryConfigurer) {
public void forEachGroup(HttpServiceGroupConfigurer.ForGroup<RestClient.Builder> groupConfigurer) {
groupConfigurer.configureGroup(
new TestGroup(GROUP_NAME, HttpServiceGroup.ClientType.REST_CLIENT, new HashSet<>()), builder,
HttpServiceProxyFactory.builder());
}
}

View File

@@ -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<WebClient.Builder> filterByName(String... groupNames) {
throw new UnsupportedOperationException("Please, implement me.");
@@ -118,26 +117,20 @@ class LoadBalancerWebClientHttpServiceGroupConfigurerTests {
}
@Override
public void configureClient(Consumer<WebClient.Builder> clientConfigurer) {
public void forEachClient(HttpServiceGroupConfigurer.ForClient<WebClient.Builder> configurer) {
}
@Override
public void configureClient(BiConsumer<HttpServiceGroup, WebClient.Builder> clientConfigurer) {
clientConfigurer.accept(new TestGroup(GROUP_NAME, HttpServiceGroup.ClientType.WEB_CLIENT, new HashSet<>()),
builder);
}
@Override
public void configureProxyFactory(
BiConsumer<HttpServiceGroup, HttpServiceProxyFactory.Builder> proxyFactoryConfigurer) {
public void forEachProxyFactory(HttpServiceGroupConfigurer.ForProxyFactory configurer) {
}
@Override
public void configure(BiConsumer<HttpServiceGroup, WebClient.Builder> clientConfigurer,
BiConsumer<HttpServiceGroup, HttpServiceProxyFactory.Builder> proxyFactoryConfigurer) {
public void forEachGroup(HttpServiceGroupConfigurer.ForGroup<WebClient.Builder> groupConfigurer) {
groupConfigurer.configureGroup(
new TestGroup(GROUP_NAME, HttpServiceGroup.ClientType.WEB_CLIENT, new HashSet<>()), builder,
HttpServiceProxyFactory.builder());
}
}