From eb8a9020566f71bac37de11155e1fa7273f00eee Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Wed, 23 Sep 2015 13:02:15 +0100 Subject: [PATCH] Ensure eureka client re-registers after config client activity Reverts part of a change made for gh-349 and rationalizes a bit of the Eureka configuration. The Eureka client cannot be shutdown without attempting to restart it (but there isn't an obvious public API for that), so it's better not to shut it down at all. See gh-421 --- ...yClientConfigServiceAutoConfiguration.java | 11 ++++------ ...ntConfigServiceBootstrapConfiguration.java | 8 ++++---- .../eureka/EurekaClientAutoConfiguration.java | 20 +++++++++---------- .../netflix/eureka/EurekaDiscoveryClient.java | 13 ++++++------ ...ntConfigServiceAutoConfigurationTests.java | 2 +- 5 files changed, 26 insertions(+), 28 deletions(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/config/DiscoveryClientConfigServiceAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/config/DiscoveryClientConfigServiceAutoConfiguration.java index e8d98693..75da08b6 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/config/DiscoveryClientConfigServiceAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/config/DiscoveryClientConfigServiceAutoConfiguration.java @@ -18,7 +18,6 @@ package org.springframework.cloud.netflix.config; import javax.annotation.PostConstruct; -import com.netflix.discovery.EurekaClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -52,18 +51,16 @@ public class DiscoveryClientConfigServiceAutoConfiguration { @Autowired private EurekaDiscoveryClientConfiguration lifecycle; - @Autowired - private EurekaClient eurekaClient; - @PostConstruct public void init() { this.lifecycle.stop(); rebind(this.clientConfig, "eurekaClientConfig"); rebind(this.instanceConfig, "eurekaInstanceConfig"); - eurekaClient.shutdown();; + // Danger, here be dragons (once it shuts down it's hard to resurrect it) + // eurekaClient.shutdown(); // FIXME: reinit EurekaClient and ApplicationInfoManager - //applicationInfoManager.initComponent(this.instanceConfig); - //discoveryManager.initComponent(this.instanceConfig, this.clientConfig); + // applicationInfoManager.initComponent(this.instanceConfig); + // discoveryManager.initComponent(this.instanceConfig, this.clientConfig); this.lifecycle.start(); } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/config/DiscoveryClientConfigServiceBootstrapConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/config/DiscoveryClientConfigServiceBootstrapConfiguration.java index 0d6ed4ab..c30e890a 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/config/DiscoveryClientConfigServiceBootstrapConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/config/DiscoveryClientConfigServiceBootstrapConfiguration.java @@ -16,8 +16,6 @@ package org.springframework.cloud.netflix.config; -import lombok.extern.apachecommons.CommonsLog; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -36,6 +34,8 @@ import org.springframework.context.event.SmartApplicationListener; import com.netflix.appinfo.InstanceInfo; import com.netflix.discovery.EurekaClient; +import lombok.extern.apachecommons.CommonsLog; + /** * Bootstrap configuration for a config client that wants to lookup the config server via * discovery. @@ -89,8 +89,8 @@ public class DiscoveryClientConfigServiceBootstrapConfiguration implements private void refresh() { try { - log.info("Locating configserver via discovery"); - InstanceInfo server = eurekaClient + log.debug("Locating configserver via discovery"); + InstanceInfo server = this.eurekaClient .getNextServerFromEureka(this.config.getDiscovery().getServiceId(), false); String url = server.getHomePageUrl(); diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java index 62d09e21..e84e39b4 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java @@ -21,8 +21,6 @@ import java.util.concurrent.ConcurrentMap; import javax.annotation.PostConstruct; -import lombok.SneakyThrows; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.AutoConfigureBefore; @@ -50,6 +48,8 @@ import com.netflix.discovery.EurekaClientConfig; import com.netflix.discovery.converters.JsonXStream; import com.netflix.discovery.converters.XmlXStream; +import lombok.SneakyThrows; + /** * @author Dave Syer */ @@ -94,25 +94,25 @@ public class EurekaClientAutoConfiguration implements ApplicationListener