From 56fbc5e970a2975729239146ab0ff450d27807c8 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Wed, 25 Mar 2015 09:53:48 -0600 Subject: [PATCH] In LoadBalancerInterceptor add ServiceInstance to static ThreadLocal and provide static getter. --- .../client/loadbalancer/LoadBalancerInterceptor.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerInterceptor.java b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerInterceptor.java index 5f1877b1..bbd5a919 100644 --- a/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerInterceptor.java +++ b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerInterceptor.java @@ -34,6 +34,8 @@ public class LoadBalancerInterceptor implements ClientHttpRequestInterceptor { private LoadBalancerClient loadBalancer; + private static final ThreadLocal instanceHolder = new ThreadLocal<>(); + public LoadBalancerInterceptor(LoadBalancerClient loadBalancer) { this.loadBalancer = loadBalancer; } @@ -43,12 +45,14 @@ public class LoadBalancerInterceptor implements ClientHttpRequestInterceptor { final ClientHttpRequestExecution execution) throws IOException { final URI originalUri = request.getURI(); String serviceName = originalUri.getHost(); + request.getHeaders().add("X-SpringCloud-Service-Id", serviceName); return this.loadBalancer.execute(serviceName, new LoadBalancerRequest() { @Override public ClientHttpResponse apply(final ServiceInstance instance) throws Exception { + instanceHolder.set(instance); HttpRequest serviceRequest = new ServiceRequestWrapper(request, instance); return execution.execute(serviceRequest, body); @@ -75,4 +79,8 @@ public class LoadBalancerInterceptor implements ClientHttpRequestInterceptor { } + public static ServiceInstance getThreadLocalServiceInstance() { + return instanceHolder.get(); + } + }