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(); + } + }