Browse Source

Switch to using LB per-client properties. Add deprecation docs. (#1036)

pull/1037/head
Olga Maciaszek-Sharma 3 years ago committed by GitHub
parent
commit
68d43a177e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/RetryLoadBalancerInterceptor.java
  2. 4
      spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/reactive/ReactorLoadBalancerExchangeFilterFunction.java
  3. 4
      spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/reactive/RetryableLoadBalancerExchangeFilterFunction.java
  4. 2
      spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/LoadBalancerClientConfiguration.java
  5. 6
      spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/blocking/XForwardedHeadersTransformer.java
  6. 14
      spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/blocking/client/BlockingLoadBalancerClient.java
  7. 6
      spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/config/BlockingLoadBalancerClientAutoConfiguration.java
  8. 23
      spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/HealthCheckServiceInstanceListSupplier.java
  9. 12
      spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/HintBasedServiceInstanceListSupplier.java
  10. 13
      spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/LoadBalancerServiceInstanceCookieTransformer.java
  11. 12
      spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/RequestBasedStickySessionServiceInstanceListSupplier.java
  12. 38
      spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/ServiceInstanceListSupplierBuilder.java
  13. 6
      spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/XForwardedHeadersTransformer.java
  14. 4
      spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/support/LoadBalancerClientFactory.java
  15. 7
      spring-cloud-loadbalancer/src/test/java/org/springframework/cloud/loadbalancer/core/ServiceInstanceListSupplierBuilderTests.java

4
spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/RetryLoadBalancerInterceptor.java

@ -57,6 +57,10 @@ public class RetryLoadBalancerInterceptor implements ClientHttpRequestIntercepto @@ -57,6 +57,10 @@ public class RetryLoadBalancerInterceptor implements ClientHttpRequestIntercepto
private final ReactiveLoadBalancer.Factory<ServiceInstance> loadBalancerFactory;
/**
* @deprecated in favour of
* {@link RetryLoadBalancerInterceptor#RetryLoadBalancerInterceptor(LoadBalancerClient, LoadBalancerRequestFactory, LoadBalancedRetryFactory, ReactiveLoadBalancer.Factory)}
*/
@Deprecated
public RetryLoadBalancerInterceptor(LoadBalancerClient loadBalancer, LoadBalancerProperties properties,
LoadBalancerRequestFactory requestFactory, LoadBalancedRetryFactory lbRetryFactory,

4
spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/reactive/ReactorLoadBalancerExchangeFilterFunction.java

@ -75,6 +75,10 @@ public class ReactorLoadBalancerExchangeFilterFunction implements LoadBalancedEx @@ -75,6 +75,10 @@ public class ReactorLoadBalancerExchangeFilterFunction implements LoadBalancedEx
this(loadBalancerFactory, properties, Collections.emptyList());
}
/**
* @deprecated in favour of
* {@link ReactorLoadBalancerExchangeFilterFunction#ReactorLoadBalancerExchangeFilterFunction(ReactiveLoadBalancer.Factory, List)}
*/
@Deprecated
public ReactorLoadBalancerExchangeFilterFunction(ReactiveLoadBalancer.Factory<ServiceInstance> loadBalancerFactory,
LoadBalancerProperties properties, List<LoadBalancerClientRequestTransformer> transformers) {

4
spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/reactive/RetryableLoadBalancerExchangeFilterFunction.java

@ -85,6 +85,10 @@ public class RetryableLoadBalancerExchangeFilterFunction implements LoadBalanced @@ -85,6 +85,10 @@ public class RetryableLoadBalancerExchangeFilterFunction implements LoadBalanced
this(retryPolicy, loadBalancerFactory, properties, Collections.emptyList());
}
/**
* @deprecated in favour of
* {@link ReactorLoadBalancerExchangeFilterFunction#ReactorLoadBalancerExchangeFilterFunction(ReactiveLoadBalancer.Factory, List)}
*/
@Deprecated
public RetryableLoadBalancerExchangeFilterFunction(LoadBalancerRetryPolicy retryPolicy,
ReactiveLoadBalancer.Factory<ServiceInstance> loadBalancerFactory, LoadBalancerProperties properties,

2
spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/LoadBalancerClientConfiguration.java

@ -94,7 +94,7 @@ public class LoadBalancerClientConfiguration { @@ -94,7 +94,7 @@ public class LoadBalancerClientConfiguration {
}
@Bean
@ConditionalOnBean(XForwardedHeadersTransformer.class)
@ConditionalOnBean({ XForwardedHeadersTransformer.class, LoadBalancerClientFactory.class })
@ConditionalOnMissingBean
@ConditionalOnProperty(value = "spring.cloud.loadbalancer.xForwarded.enabledXforwarded", havingValue = "true")
public XForwardedHeadersTransformer xForwarderHeadersTransformer(LoadBalancerClientFactory clientFactory) {

6
spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/blocking/XForwardedHeadersTransformer.java

@ -19,7 +19,7 @@ package org.springframework.cloud.loadbalancer.blocking; @@ -19,7 +19,7 @@ package org.springframework.cloud.loadbalancer.blocking;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerProperties;
import org.springframework.cloud.client.loadbalancer.LoadBalancerRequestTransformer;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
import org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoadBalancer;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpRequest;
@ -33,9 +33,9 @@ import org.springframework.http.HttpRequest; @@ -33,9 +33,9 @@ import org.springframework.http.HttpRequest;
public class XForwardedHeadersTransformer implements LoadBalancerRequestTransformer {
private final LoadBalancerClientFactory factory;
private final ReactiveLoadBalancer.Factory<ServiceInstance> factory;
public XForwardedHeadersTransformer(LoadBalancerClientFactory factory) {
public XForwardedHeadersTransformer(ReactiveLoadBalancer.Factory<ServiceInstance> factory) {
this.factory = factory;
}

14
spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/blocking/client/BlockingLoadBalancerClient.java

@ -54,15 +54,20 @@ import static org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoa @@ -54,15 +54,20 @@ import static org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoa
@SuppressWarnings({ "unchecked", "rawtypes" })
public class BlockingLoadBalancerClient implements LoadBalancerClient {
private final LoadBalancerClientFactory loadBalancerClientFactory;
private final LoadBalancerProperties properties;
private final ReactiveLoadBalancer.Factory<ServiceInstance> loadBalancerClientFactory;
/**
* @deprecated in favour of
* {@link BlockingLoadBalancerClient#BlockingLoadBalancerClient(ReactiveLoadBalancer.Factory)}
*/
@Deprecated
public BlockingLoadBalancerClient(LoadBalancerClientFactory loadBalancerClientFactory,
LoadBalancerProperties properties) {
this.loadBalancerClientFactory = loadBalancerClientFactory;
this.properties = properties;
}
public BlockingLoadBalancerClient(ReactiveLoadBalancer.Factory<ServiceInstance> loadBalancerClientFactory) {
this.loadBalancerClientFactory = loadBalancerClientFactory;
}
@Override
@ -155,6 +160,7 @@ public class BlockingLoadBalancerClient implements LoadBalancerClient { @@ -155,6 +160,7 @@ public class BlockingLoadBalancerClient implements LoadBalancerClient {
}
private String getHint(String serviceId) {
LoadBalancerProperties properties = loadBalancerClientFactory.getProperties(serviceId);
String defaultHint = properties.getHint().getOrDefault("default", "default");
String hintPropertyValue = properties.getHint().get(serviceId);
return hintPropertyValue != null ? hintPropertyValue : defaultHint;

6
spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/config/BlockingLoadBalancerClientAutoConfiguration.java

@ -59,9 +59,8 @@ public class BlockingLoadBalancerClientAutoConfiguration { @@ -59,9 +59,8 @@ public class BlockingLoadBalancerClientAutoConfiguration {
@Bean
@ConditionalOnBean(LoadBalancerClientFactory.class)
@ConditionalOnMissingBean
public LoadBalancerClient blockingLoadBalancerClient(LoadBalancerClientFactory loadBalancerClientFactory,
LoadBalancerProperties properties) {
return new BlockingLoadBalancerClient(loadBalancerClientFactory, properties);
public LoadBalancerClient blockingLoadBalancerClient(LoadBalancerClientFactory loadBalancerClientFactory) {
return new BlockingLoadBalancerClient(loadBalancerClientFactory);
}
@Bean
@ -76,6 +75,7 @@ public class BlockingLoadBalancerClientAutoConfiguration { @@ -76,6 +75,7 @@ public class BlockingLoadBalancerClientAutoConfiguration {
@Bean
@ConditionalOnProperty(value = "spring.cloud.loadbalancer.xforwarded.enabledXforwarded", havingValue = "true")
@ConditionalOnMissingBean(XForwardedHeadersTransformer.class)
@ConditionalOnBean(LoadBalancerClientFactory.class)
public XForwardedHeadersTransformer xForwarderHeadersTransformer(
LoadBalancerClientFactory loadBalancerClientFactory) {
return new XForwardedHeadersTransformer(loadBalancerClientFactory);

23
spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/HealthCheckServiceInstanceListSupplier.java

@ -32,6 +32,7 @@ import org.springframework.beans.factory.DisposableBean; @@ -32,6 +32,7 @@ import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerProperties;
import org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoadBalancer;
import org.springframework.util.StringUtils;
/**
@ -59,6 +60,11 @@ public class HealthCheckServiceInstanceListSupplier extends DelegatingServiceIns @@ -59,6 +60,11 @@ public class HealthCheckServiceInstanceListSupplier extends DelegatingServiceIns
private final BiFunction<ServiceInstance, String, Mono<Boolean>> aliveFunction;
/**
* @deprecated in favour of
* {@link HealthCheckServiceInstanceListSupplier#HealthCheckServiceInstanceListSupplier(ServiceInstanceListSupplier, ReactiveLoadBalancer.Factory, BiFunction)}
*/
@Deprecated
public HealthCheckServiceInstanceListSupplier(ServiceInstanceListSupplier delegate,
LoadBalancerProperties.HealthCheck healthCheck,
BiFunction<ServiceInstance, String, Mono<Boolean>> aliveFunction) {
@ -76,6 +82,23 @@ public class HealthCheckServiceInstanceListSupplier extends DelegatingServiceIns @@ -76,6 +82,23 @@ public class HealthCheckServiceInstanceListSupplier extends DelegatingServiceIns
.refCount(1);
}
public HealthCheckServiceInstanceListSupplier(ServiceInstanceListSupplier delegate,
ReactiveLoadBalancer.Factory<ServiceInstance> loadBalancerClientFactory,
BiFunction<ServiceInstance, String, Mono<Boolean>> aliveFunction) {
super(delegate);
this.healthCheck = loadBalancerClientFactory.getProperties(getServiceId()).getHealthCheck();
defaultHealthCheckPath = healthCheck.getPath().getOrDefault("default", "/actuator/health");
this.aliveFunction = aliveFunction;
Repeat<Object> aliveInstancesReplayRepeat = Repeat
.onlyIf(repeatContext -> this.healthCheck.getRefetchInstances())
.fixedBackoff(healthCheck.getRefetchInstancesInterval());
Flux<List<ServiceInstance>> aliveInstancesFlux = Flux.defer(delegate).repeatWhen(aliveInstancesReplayRepeat)
.switchMap(serviceInstances -> healthCheckFlux(serviceInstances)
.map(alive -> Collections.unmodifiableList(new ArrayList<>(alive))));
aliveInstancesReplay = aliveInstancesFlux.delaySubscription(healthCheck.getInitialDelay()).replay(1)
.refCount(1);
}
@Override
public void afterPropertiesSet() {
Disposable healthCheckDisposable = this.healthCheckDisposable;

12
spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/HintBasedServiceInstanceListSupplier.java

@ -26,6 +26,7 @@ import org.springframework.cloud.client.loadbalancer.HintRequestContext; @@ -26,6 +26,7 @@ import org.springframework.cloud.client.loadbalancer.HintRequestContext;
import org.springframework.cloud.client.loadbalancer.LoadBalancerProperties;
import org.springframework.cloud.client.loadbalancer.Request;
import org.springframework.cloud.client.loadbalancer.RequestDataContext;
import org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoadBalancer;
import org.springframework.http.HttpHeaders;
import org.springframework.util.StringUtils;
@ -40,12 +41,23 @@ public class HintBasedServiceInstanceListSupplier extends DelegatingServiceInsta @@ -40,12 +41,23 @@ public class HintBasedServiceInstanceListSupplier extends DelegatingServiceInsta
private final LoadBalancerProperties properties;
/**
* @deprecated in favour of
* {@link HintBasedServiceInstanceListSupplier#HintBasedServiceInstanceListSupplier(ServiceInstanceListSupplier, ReactiveLoadBalancer.Factory)}
*/
@Deprecated
public HintBasedServiceInstanceListSupplier(ServiceInstanceListSupplier delegate,
LoadBalancerProperties properties) {
super(delegate);
this.properties = properties;
}
public HintBasedServiceInstanceListSupplier(ServiceInstanceListSupplier delegate,
ReactiveLoadBalancer.Factory<ServiceInstance> factory) {
super(delegate);
this.properties = factory.getProperties(getServiceId());
}
@Override
public Flux<List<ServiceInstance>> get() {
return delegate.get();

13
spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/LoadBalancerServiceInstanceCookieTransformer.java

@ -23,6 +23,7 @@ import org.springframework.cloud.client.ServiceInstance; @@ -23,6 +23,7 @@ import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.cloud.client.loadbalancer.LoadBalancerProperties;
import org.springframework.cloud.client.loadbalancer.LoadBalancerRequestTransformer;
import org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoadBalancer;
import org.springframework.http.HttpCookie;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpRequest;
@ -37,18 +38,26 @@ import org.springframework.util.StringUtils; @@ -37,18 +38,26 @@ import org.springframework.util.StringUtils;
*/
public class LoadBalancerServiceInstanceCookieTransformer implements LoadBalancerRequestTransformer {
private final LoadBalancerProperties.StickySession stickySessionProperties;
private ReactiveLoadBalancer.Factory<ServiceInstance> factory;
private LoadBalancerProperties.StickySession stickySessionProperties;
public LoadBalancerServiceInstanceCookieTransformer(LoadBalancerProperties.StickySession stickySessionProperties) {
this.stickySessionProperties = stickySessionProperties;
}
public LoadBalancerServiceInstanceCookieTransformer(ReactiveLoadBalancer.Factory<ServiceInstance> factory) {
this.factory = factory;
}
@Override
public HttpRequest transformRequest(HttpRequest request, ServiceInstance instance) {
if (instance == null) {
return request;
}
String instanceIdCookieName = stickySessionProperties.getInstanceIdCookieName();
LoadBalancerProperties.StickySession stickySession = factory != null
? factory.getProperties(instance.getServiceId()).getStickySession() : stickySessionProperties;
String instanceIdCookieName = stickySession.getInstanceIdCookieName();
if (!StringUtils.hasText(instanceIdCookieName)) {
return request;
}

12
spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/RequestBasedStickySessionServiceInstanceListSupplier.java

@ -27,6 +27,7 @@ import org.springframework.cloud.client.ServiceInstance; @@ -27,6 +27,7 @@ import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerProperties;
import org.springframework.cloud.client.loadbalancer.Request;
import org.springframework.cloud.client.loadbalancer.RequestDataContext;
import org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoadBalancer;
import org.springframework.util.MultiValueMap;
/**
@ -42,12 +43,23 @@ public class RequestBasedStickySessionServiceInstanceListSupplier extends Delega @@ -42,12 +43,23 @@ public class RequestBasedStickySessionServiceInstanceListSupplier extends Delega
private final LoadBalancerProperties properties;
/**
* @deprecated in favour of
* {@link RequestBasedStickySessionServiceInstanceListSupplier#RequestBasedStickySessionServiceInstanceListSupplier(ServiceInstanceListSupplier, ReactiveLoadBalancer.Factory)}
*/
@Deprecated
public RequestBasedStickySessionServiceInstanceListSupplier(ServiceInstanceListSupplier delegate,
LoadBalancerProperties properties) {
super(delegate);
this.properties = properties;
}
public RequestBasedStickySessionServiceInstanceListSupplier(ServiceInstanceListSupplier delegate,
ReactiveLoadBalancer.Factory<ServiceInstance> loadBalancerClientFactory) {
super(delegate);
this.properties = loadBalancerClientFactory.getProperties(getServiceId());
}
@Override
public Flux<List<ServiceInstance>> get() {
return delegate.get();

38
spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/ServiceInstanceListSupplierBuilder.java

@ -30,9 +30,10 @@ import org.springframework.beans.factory.ObjectProvider; @@ -30,9 +30,10 @@ import org.springframework.beans.factory.ObjectProvider;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.discovery.ReactiveDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalancerProperties;
import org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoadBalancer;
import org.springframework.cloud.loadbalancer.cache.LoadBalancerCacheManager;
import org.springframework.cloud.loadbalancer.config.LoadBalancerZoneConfig;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.http.HttpStatus;
import org.springframework.util.Assert;
@ -117,9 +118,10 @@ public final class ServiceInstanceListSupplierBuilder { @@ -117,9 +118,10 @@ public final class ServiceInstanceListSupplierBuilder {
*/
public ServiceInstanceListSupplierBuilder withHealthChecks() {
DelegateCreator creator = (context, delegate) -> {
LoadBalancerProperties properties = context.getBean(LoadBalancerProperties.class);
ReactiveLoadBalancer.Factory<ServiceInstance> loadBalancerClientFactory = context
.getBean(LoadBalancerClientFactory.class);
WebClient.Builder webClient = context.getBean(WebClient.Builder.class);
return healthCheckServiceInstanceListSupplier(webClient.build(), delegate, properties);
return healthCheckServiceInstanceListSupplier(webClient.build(), delegate, loadBalancerClientFactory);
};
this.creators.add(creator);
return this;
@ -133,8 +135,8 @@ public final class ServiceInstanceListSupplierBuilder { @@ -133,8 +135,8 @@ public final class ServiceInstanceListSupplierBuilder {
*/
public ServiceInstanceListSupplierBuilder withHealthChecks(WebClient webClient) {
DelegateCreator creator = (context, delegate) -> {
LoadBalancerProperties properties = context.getBean(LoadBalancerProperties.class);
return healthCheckServiceInstanceListSupplier(webClient, delegate, properties);
LoadBalancerClientFactory loadBalancerClientFactory = context.getBean(LoadBalancerClientFactory.class);
return healthCheckServiceInstanceListSupplier(webClient, delegate, loadBalancerClientFactory);
};
this.creators.add(creator);
return this;
@ -160,8 +162,8 @@ public final class ServiceInstanceListSupplierBuilder { @@ -160,8 +162,8 @@ public final class ServiceInstanceListSupplierBuilder {
public ServiceInstanceListSupplierBuilder withBlockingHealthChecks() {
DelegateCreator creator = (context, delegate) -> {
RestTemplate restTemplate = context.getBean(RestTemplate.class);
LoadBalancerProperties properties = context.getBean(LoadBalancerProperties.class);
return blockingHealthCheckServiceInstanceListSupplier(restTemplate, delegate, properties);
LoadBalancerClientFactory loadBalancerClientFactory = context.getBean(LoadBalancerClientFactory.class);
return blockingHealthCheckServiceInstanceListSupplier(restTemplate, delegate, loadBalancerClientFactory);
};
this.creators.add(creator);
return this;
@ -175,8 +177,8 @@ public final class ServiceInstanceListSupplierBuilder { @@ -175,8 +177,8 @@ public final class ServiceInstanceListSupplierBuilder {
*/
public ServiceInstanceListSupplierBuilder withBlockingHealthChecks(RestTemplate restTemplate) {
DelegateCreator creator = (context, delegate) -> {
LoadBalancerProperties properties = context.getBean(LoadBalancerProperties.class);
return blockingHealthCheckServiceInstanceListSupplier(restTemplate, delegate, properties);
LoadBalancerClientFactory loadBalancerClientFactory = context.getBean(LoadBalancerClientFactory.class);
return blockingHealthCheckServiceInstanceListSupplier(restTemplate, delegate, loadBalancerClientFactory);
};
this.creators.add(creator);
return this;
@ -203,8 +205,8 @@ public final class ServiceInstanceListSupplierBuilder { @@ -203,8 +205,8 @@ public final class ServiceInstanceListSupplierBuilder {
*/
public ServiceInstanceListSupplierBuilder withRequestBasedStickySession() {
DelegateCreator creator = (context, delegate) -> {
LoadBalancerProperties properties = context.getBean(LoadBalancerProperties.class);
return new RequestBasedStickySessionServiceInstanceListSupplier(delegate, properties);
LoadBalancerClientFactory loadBalancerClientFactory = context.getBean(LoadBalancerClientFactory.class);
return new RequestBasedStickySessionServiceInstanceListSupplier(delegate, loadBalancerClientFactory);
};
this.creators.add(creator);
return this;
@ -245,8 +247,8 @@ public final class ServiceInstanceListSupplierBuilder { @@ -245,8 +247,8 @@ public final class ServiceInstanceListSupplierBuilder {
public ServiceInstanceListSupplierBuilder withHints() {
DelegateCreator creator = (context, delegate) -> {
LoadBalancerProperties properties = context.getBean(LoadBalancerProperties.class);
return new HintBasedServiceInstanceListSupplier(delegate, properties);
LoadBalancerClientFactory factory = context.getBean(LoadBalancerClientFactory.class);
return new HintBasedServiceInstanceListSupplier(delegate, factory);
};
creators.add(creator);
return this;
@ -287,8 +289,9 @@ public final class ServiceInstanceListSupplierBuilder { @@ -287,8 +289,9 @@ public final class ServiceInstanceListSupplierBuilder {
}
private ServiceInstanceListSupplier healthCheckServiceInstanceListSupplier(WebClient webClient,
ServiceInstanceListSupplier delegate, LoadBalancerProperties properties) {
return new HealthCheckServiceInstanceListSupplier(delegate, properties.getHealthCheck(),
ServiceInstanceListSupplier delegate,
ReactiveLoadBalancer.Factory<ServiceInstance> loadBalancerClientFactory) {
return new HealthCheckServiceInstanceListSupplier(delegate, loadBalancerClientFactory,
(serviceInstance, healthCheckPath) -> webClient.get()
.uri(UriComponentsBuilder.fromUriString(getUri(serviceInstance, healthCheckPath)).build()
.toUri())
@ -297,8 +300,9 @@ public final class ServiceInstanceListSupplierBuilder { @@ -297,8 +300,9 @@ public final class ServiceInstanceListSupplierBuilder {
}
private ServiceInstanceListSupplier blockingHealthCheckServiceInstanceListSupplier(RestTemplate restTemplate,
ServiceInstanceListSupplier delegate, LoadBalancerProperties properties) {
return new HealthCheckServiceInstanceListSupplier(delegate, properties.getHealthCheck(),
ServiceInstanceListSupplier delegate,
ReactiveLoadBalancer.Factory<ServiceInstance> loadBalancerClientFactory) {
return new HealthCheckServiceInstanceListSupplier(delegate, loadBalancerClientFactory,
(serviceInstance, healthCheckPath) -> Mono.defer(() -> {
URI uri = UriComponentsBuilder.fromUriString(getUri(serviceInstance, healthCheckPath)).build()
.toUri();

6
spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/XForwardedHeadersTransformer.java

@ -19,7 +19,7 @@ package org.springframework.cloud.loadbalancer.core; @@ -19,7 +19,7 @@ package org.springframework.cloud.loadbalancer.core;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerProperties;
import org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerClientRequestTransformer;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
import org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoadBalancer;
import org.springframework.http.HttpHeaders;
import org.springframework.web.reactive.function.client.ClientRequest;
@ -33,9 +33,9 @@ import org.springframework.web.reactive.function.client.ClientRequest; @@ -33,9 +33,9 @@ import org.springframework.web.reactive.function.client.ClientRequest;
public class XForwardedHeadersTransformer implements LoadBalancerClientRequestTransformer {
private final LoadBalancerClientFactory clientFactory;
private final ReactiveLoadBalancer.Factory<ServiceInstance> clientFactory;
public XForwardedHeadersTransformer(LoadBalancerClientFactory clientFactory) {
public XForwardedHeadersTransformer(ReactiveLoadBalancer.Factory<ServiceInstance> clientFactory) {
this.clientFactory = clientFactory;
}

4
spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/support/LoadBalancerClientFactory.java

@ -55,6 +55,10 @@ public class LoadBalancerClientFactory extends NamedContextFactory<LoadBalancerC @@ -55,6 +55,10 @@ public class LoadBalancerClientFactory extends NamedContextFactory<LoadBalancerC
private final LoadBalancerClientsProperties properties;
/**
* @deprecated in favour of
* {@link LoadBalancerClientFactory#LoadBalancerClientFactory(LoadBalancerClientsProperties)}
*/
@Deprecated
public LoadBalancerClientFactory() {
this(null);

7
spring-cloud-loadbalancer/src/test/java/org/springframework/cloud/loadbalancer/core/ServiceInstanceListSupplierBuilderTests.java

@ -20,8 +20,9 @@ import org.junit.jupiter.api.Test; @@ -20,8 +20,9 @@ import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.cloud.client.discovery.ReactiveDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalancerProperties;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClientsProperties;
import org.springframework.cloud.loadbalancer.cache.LoadBalancerCacheManager;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
import org.springframework.web.reactive.function.client.WebClient;
@ -89,8 +90,8 @@ public class ServiceInstanceListSupplierBuilderTests { @@ -89,8 +90,8 @@ public class ServiceInstanceListSupplierBuilderTests {
}
@Bean
public LoadBalancerProperties loadBalancerProperties() {
return new LoadBalancerProperties();
public LoadBalancerClientFactory loadBalancerClientFactory() {
return new LoadBalancerClientFactory(new LoadBalancerClientsProperties());
}
@Bean

Loading…
Cancel
Save