diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/discovery/DiscoveryClientRouteLocator.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/discovery/DiscoveryClientRouteLocator.java index 0fd88ab3..d459c148 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/discovery/DiscoveryClientRouteLocator.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/discovery/DiscoveryClientRouteLocator.java @@ -57,7 +57,12 @@ public class DiscoveryClientRouteLocator extends SimpleRouteLocator super(servletPath, properties); if (properties.isIgnoreLocalService()) { - ServiceInstance instance = discovery.getLocalServiceInstance(); + ServiceInstance instance = null; + try { + instance = discovery.getLocalServiceInstance(); + } catch (Exception e) { + log.warn("Error locating local service instance", e); + } if (instance != null) { String localServiceId = instance.getServiceId(); if (!properties.getIgnoredServices().contains(localServiceId)) { diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/discovery/DiscoveryClientRouteLocatorTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/discovery/DiscoveryClientRouteLocatorTests.java index b2ee6b6f..65f7a30b 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/discovery/DiscoveryClientRouteLocatorTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/discovery/DiscoveryClientRouteLocatorTests.java @@ -601,6 +601,19 @@ public class DiscoveryClientRouteLocatorTests { assertMapping(routesMap, MYSERVICE); } + @Test + public void testLocalServiceExceptionIgnored() { + given(this.discovery.getServices()) + .willReturn(Collections.emptyList()); + given(this.discovery.getLocalServiceInstance()).willThrow(new RuntimeException()); + + DiscoveryClientRouteLocator routeLocator = new DiscoveryClientRouteLocator("/", + this.discovery, this.properties); + + // if no exception is thrown in constructor, this is a success + routeLocator.locateRoutes(); + } + @Test public void testRegExServiceRouteMapperNoServiceIdMatches() { given(this.discovery.getServices())