From 8d8f6937e5f28af9247f19ae0315766f0f86ea27 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Tue, 21 Oct 2014 19:13:41 -0700 Subject: [PATCH] Use instanceId for server id if available --- .../eureka/DomainExtractingServerList.java | 44 +++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/DomainExtractingServerList.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/DomainExtractingServerList.java index eb9093da..b2568222 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/DomainExtractingServerList.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/DomainExtractingServerList.java @@ -15,12 +15,18 @@ */ package org.springframework.cloud.netflix.ribbon.eureka; +import java.util.ArrayList; import java.util.List; +import lombok.Getter; +import lombok.Setter; + import org.springframework.util.StringUtils; +import com.netflix.appinfo.InstanceInfo; import com.netflix.loadbalancer.Server; import com.netflix.loadbalancer.ServerList; +import com.netflix.niws.loadbalancer.DiscoveryEnabledServer; /** * @author Dave Syer @@ -47,11 +53,43 @@ public class DomainExtractingServerList implements ServerList { } private List setZones(List servers) { + List result = new ArrayList(); for (Server server : servers) { - String zone = extractApproximateZone(server); - server.setZone(zone); + if (server instanceof DiscoveryEnabledServer) { + result.add(new DomainExtractingServer((DiscoveryEnabledServer) server)); + } + else { + result.add(server); + } } - return servers; + return result; + } + +} + +class DomainExtractingServer extends DiscoveryEnabledServer { + + @Getter + @Setter + private String id; + + public DomainExtractingServer(DiscoveryEnabledServer server) { + super(server.getInstanceInfo(), true, false); + String zone = extractApproximateZone(server); + setZone(zone); + String id = extractId(server); + setId(id); + } + + private String extractId(Server server) { + if (server instanceof DiscoveryEnabledServer) { + DiscoveryEnabledServer enabled = (DiscoveryEnabledServer) server; + InstanceInfo instance = enabled.getInstanceInfo(); + if (instance.getMetadata().containsKey("instanceId")) { + return instance.getMetadata().get("instanceId"); + } + } + return server.getId(); } private String extractApproximateZone(Server server) {