diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/DataCenterAwareMarshallingStrategy.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/DataCenterAwareMarshallingStrategy.java index b6d36b37f..2b8bb085e 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/DataCenterAwareMarshallingStrategy.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/DataCenterAwareMarshallingStrategy.java @@ -177,8 +177,7 @@ public class DataCenterAwareMarshallingStrategy implements MarshallingStrategy { String instanceId = info.getMetadata().get("instanceId"); DataCenterInfo dataCenter = info.getDataCenterInfo(); if (instanceId != null && Name.Amazon != dataCenter.getName()) { - String old = info.getId(); - String id = old.endsWith(instanceId) ? old : old + ":" + instanceId; + String id = calculateId(info, instanceId); info = new InstanceInfo.Builder(info).setDataCenterInfo( new InstanceIdDataCenterInfo(id)).build(); source = info; @@ -186,6 +185,17 @@ public class DataCenterAwareMarshallingStrategy implements MarshallingStrategy { super.marshal(source, writer, context); } + String calculateId(InstanceInfo info, String instanceId) { + String old = info.getId(); + if (old.endsWith(instanceId)) { + return old; + } + if (instanceId.startsWith(old)) { + return instanceId; + } + return old + ":" + instanceId; + } + @Override public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { @@ -194,8 +204,7 @@ public class DataCenterAwareMarshallingStrategy implements MarshallingStrategy { String instanceId = info.getMetadata().get("instanceId"); DataCenterInfo dataCenter = info.getDataCenterInfo(); if (instanceId != null && Name.Amazon != dataCenter.getName()) { - String old = info.getId(); - String id = old.endsWith(instanceId) ? old : old + ":" + instanceId; + String id = calculateId(info, instanceId); info = new InstanceInfo.Builder(info).setDataCenterInfo( new InstanceIdDataCenterInfo(id)).build(); obj = info;