RestTemplateCustomizer to customize the @LoadBalanced RestTemplate.
By default, creates a RestTemplateCustomizer adds a LoadBalancerInterceptor fixes gh-16
This commit is contained in:
@@ -21,6 +21,7 @@ import java.util.List;
|
||||
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.http.client.ClientHttpRequestInterceptor;
|
||||
@@ -39,14 +40,25 @@ public class LoadBalancerAutoConfiguration {
|
||||
|
||||
@Bean
|
||||
@LoadBalanced
|
||||
public RestTemplate loadBalancedRestTemplate(LoadBalancerInterceptor loadBalancerInterceptor) {
|
||||
public RestTemplate loadBalancedRestTemplate(RestTemplateCustomizer customizer) {
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
List<ClientHttpRequestInterceptor> list = new ArrayList<>();
|
||||
list.add(loadBalancerInterceptor);
|
||||
restTemplate.setInterceptors(list);
|
||||
customizer.customize(restTemplate);
|
||||
return restTemplate;
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public RestTemplateCustomizer restTemplateCustomizer(final LoadBalancerInterceptor loadBalancerInterceptor) {
|
||||
return new RestTemplateCustomizer() {
|
||||
@Override
|
||||
public void customize(RestTemplate restTemplate) {
|
||||
List<ClientHttpRequestInterceptor> list = new ArrayList<>();
|
||||
list.add(loadBalancerInterceptor);
|
||||
restTemplate.setInterceptors(list);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Bean
|
||||
public LoadBalancerInterceptor ribbonInterceptor(LoadBalancerClient loadBalancerClient) {
|
||||
return new LoadBalancerInterceptor(loadBalancerClient);
|
||||
|
||||
@@ -34,8 +34,6 @@ public class LoadBalancerInterceptor implements ClientHttpRequestInterceptor {
|
||||
|
||||
private LoadBalancerClient loadBalancer;
|
||||
|
||||
private static final ThreadLocal<ServiceInstance> instanceHolder = new ThreadLocal<>();
|
||||
|
||||
public LoadBalancerInterceptor(LoadBalancerClient loadBalancer) {
|
||||
this.loadBalancer = loadBalancer;
|
||||
}
|
||||
@@ -51,7 +49,6 @@ public class LoadBalancerInterceptor implements ClientHttpRequestInterceptor {
|
||||
@Override
|
||||
public ClientHttpResponse apply(final ServiceInstance instance)
|
||||
throws Exception {
|
||||
instanceHolder.set(instance);
|
||||
HttpRequest serviceRequest = new ServiceRequestWrapper(request,
|
||||
instance);
|
||||
return execution.execute(serviceRequest, body);
|
||||
@@ -78,8 +75,4 @@ public class LoadBalancerInterceptor implements ClientHttpRequestInterceptor {
|
||||
|
||||
}
|
||||
|
||||
public static ServiceInstance getThreadLocalServiceInstance() {
|
||||
return instanceHolder.get();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package org.springframework.cloud.client.loadbalancer;
|
||||
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
/**
|
||||
* @author Spencer Gibb
|
||||
*/
|
||||
public interface RestTemplateCustomizer {
|
||||
void customize(RestTemplate restTemplate);
|
||||
}
|
||||
Reference in New Issue
Block a user