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 d29f56e8..7fcf32ab 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 @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import org.springframework.boot.autoconfigure.web.ServerProperties; import org.springframework.cloud.client.DefaultServiceInstance; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; @@ -35,9 +36,12 @@ import com.ecwid.consul.v1.agent.model.Self; import com.ecwid.consul.v1.agent.model.Service; import com.ecwid.consul.v1.catalog.model.CatalogService; +import lombok.extern.apachecommons.CommonsLog; + /** * @author Spencer Gibb */ +@CommonsLog public class ConsulDiscoveryClient implements DiscoveryClient { private ConsulLifecycle lifecycle; @@ -45,12 +49,15 @@ public class ConsulDiscoveryClient implements DiscoveryClient { private ConsulClient client; private ConsulDiscoveryProperties properties; + private ServerProperties serverProperties; public ConsulDiscoveryClient(ConsulClient client, ConsulLifecycle lifecycle, - ConsulDiscoveryProperties properties) { + ConsulDiscoveryProperties properties, + ServerProperties serverProperties) { this.client = client; this.lifecycle = lifecycle; this.properties = properties; + this.serverProperties = serverProperties; } @Override @@ -62,9 +69,21 @@ public class ConsulDiscoveryClient implements DiscoveryClient { public ServiceInstance getLocalServiceInstance() { Response> agentServices = client.getAgentServices(); Service service = agentServices.getValue().get(lifecycle.getServiceId()); + String serviceId; + Integer port; if (service == null) { - throw new IllegalStateException("Unable to locate service in consul agent: " + //possibly called before registration + log.warn("Unable to locate service in consul agent: " + lifecycle.getServiceId()); + + serviceId = lifecycle.getServiceId(); + port = lifecycle.getConfiguredPort(); + if (port == 0 && serverProperties.getPort() != null) { + port = serverProperties.getPort(); + } + } else { + serviceId = service.getId(); + port = service.getPort(); } String host = "localhost"; Response agentSelf = client.getAgentSelf(); @@ -76,7 +95,7 @@ public class ConsulDiscoveryClient implements DiscoveryClient { host = member.getName(); } } - return new DefaultServiceInstance(service.getId(), host, service.getPort(), false); + return new DefaultServiceInstance(serviceId, host, port, false); } @Override diff --git a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClientConfiguration.java b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClientConfiguration.java index 983dc11d..689acee4 100644 --- a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClientConfiguration.java +++ b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClientConfiguration.java @@ -20,6 +20,7 @@ import com.ecwid.consul.v1.ConsulClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.autoconfigure.web.ServerProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.consul.ConditionalOnConsulEnabled; import org.springframework.context.annotation.Bean; @@ -64,8 +65,8 @@ public class ConsulDiscoveryClientConfiguration { } @Bean - public ConsulDiscoveryClient consulDiscoveryClient() { - return new ConsulDiscoveryClient(consulClient, consulLifecycle(), consulDiscoveryProperties()); + public ConsulDiscoveryClient consulDiscoveryClient(ServerProperties serverProperties) { + return new ConsulDiscoveryClient(consulClient, consulLifecycle(), consulDiscoveryProperties(), serverProperties); } @Bean