diff --git a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClient.java b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClient.java index fd861136..d29f56e8 100644 --- a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClient.java +++ b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClient.java @@ -16,7 +16,7 @@ package org.springframework.cloud.consul.discovery; -import static org.springframework.cloud.consul.discovery.Utils.getCatalogServiceHost; +import static org.springframework.cloud.consul.discovery.IpAddressUtils.getCatalogServiceHost; import java.util.ArrayList; import java.util.List; diff --git a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryProperties.java b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryProperties.java index e2346e15..b5ab8fa0 100644 --- a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryProperties.java +++ b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryProperties.java @@ -16,18 +16,19 @@ package org.springframework.cloud.consul.discovery; +import static org.springframework.cloud.consul.discovery.IpAddressUtils.getFirstNonLoopbackAddress; + import java.net.InetAddress; -import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import lombok.AccessLevel; import lombok.Data; - import lombok.Getter; import lombok.Setter; import lombok.extern.apachecommons.CommonsLog; + import org.springframework.boot.context.properties.ConfigurationProperties; /** @@ -78,13 +79,9 @@ public class ConsulDiscoveryProperties { private String[] initHostInfo() { String[] info = new String[2]; - try { - info[0] = InetAddress.getLocalHost().getHostAddress(); - info[1] = InetAddress.getLocalHost().getHostName(); - } - catch (UnknownHostException ex) { - log.error("Cannot get host info", ex); - } + InetAddress address = getFirstNonLoopbackAddress(); + info[0] = address.getHostAddress(); + info[1] = address.getHostName(); return info; } } diff --git a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulServer.java b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulServer.java index 29c39d3f..f563d774 100644 --- a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulServer.java +++ b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulServer.java @@ -16,7 +16,7 @@ package org.springframework.cloud.consul.discovery; -import static org.springframework.cloud.consul.discovery.Utils.getCatalogServiceHost; +import static org.springframework.cloud.consul.discovery.IpAddressUtils.getCatalogServiceHost; import com.ecwid.consul.v1.catalog.model.CatalogService; import com.netflix.loadbalancer.Server; diff --git a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/Utils.java b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/IpAddressUtils.java similarity index 53% rename from spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/Utils.java rename to spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/IpAddressUtils.java index ebb79a1d..c62ec927 100644 --- a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/Utils.java +++ b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/IpAddressUtils.java @@ -16,13 +16,24 @@ package org.springframework.cloud.consul.discovery; -import com.ecwid.consul.v1.catalog.model.CatalogService; +import java.io.IOException; +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.util.Enumeration; + +import lombok.SneakyThrows; +import lombok.extern.apachecommons.CommonsLog; + import org.springframework.util.StringUtils; +import com.ecwid.consul.v1.catalog.model.CatalogService; + /** * @author Spencer Gibb */ -public class Utils { +@CommonsLog +public class IpAddressUtils { public static String getCatalogServiceHost(CatalogService service, boolean preferAddress) { if (preferAddress) { @@ -35,4 +46,26 @@ public class Utils { return service.getNode(); } + @SneakyThrows + public static InetAddress getFirstNonLoopbackAddress() { + try { + for (Enumeration enumNic = NetworkInterface.getNetworkInterfaces(); + enumNic.hasMoreElements(); ) { + NetworkInterface ifc = enumNic.nextElement(); + if (ifc.isUp()) { + for (Enumeration enumAddr = ifc.getInetAddresses(); + enumAddr.hasMoreElements(); ) { + InetAddress address = enumAddr.nextElement(); + if (address instanceof Inet4Address && !address.isLoopbackAddress()) { + return address; + } + } + } + } + } + catch (IOException ex) { + log.error("Cannot get host info", ex); + } + return InetAddress.getLocalHost(); + } }