Browse Source

Eureka server is itself a eureka client when discovering eureka peers (it gets DiscoverClient from DiscoveryManager). Make sure DiscoveryManager is initialzed regardless of if the client or server config is invoked first.

fixes gh-18
pull/6/head
Spencer Gibb 11 years ago
parent
commit
bf43f7dad4
  1. 23
      spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/DiscoveryManagerIntitializer.java
  2. 8
      spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientConfiguration.java
  3. 11
      spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaServerInitializerConfiguration.java

23
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/DiscoveryManagerIntitializer.java

@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
package org.springframework.cloud.netflix.eureka;
import com.netflix.discovery.DiscoveryManager;
import org.springframework.beans.factory.annotation.Autowired;
/**
* @author Spencer Gibb
*/
public class DiscoveryManagerIntitializer {
@Autowired
private EurekaClientConfigBean clientConfig;
@Autowired
private EurekaInstanceConfigBean instanceConfig;
public synchronized void init() {
if (DiscoveryManager.getInstance().getDiscoveryClient() == null) {
DiscoveryManager.getInstance().initComponent(instanceConfig, clientConfig);
}
}
}

8
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientConfiguration.java

@ -79,7 +79,7 @@ public class EurekaClientConfiguration implements SmartLifecycle, Ordered { @@ -79,7 +79,7 @@ public class EurekaClientConfiguration implements SmartLifecycle, Ordered {
public void start() {
if (port != 0) {
instanceConfig.setNonSecurePort(port);
DiscoveryManager.getInstance().initComponent(instanceConfig, clientConfig);
discoveryManagerIntitializer().init();
logger.info("Registering application {} with eureka with status UP",
instanceConfig.getAppname());
ApplicationInfoManager.getInstance().setInstanceStatus(InstanceStatus.UP);
@ -119,6 +119,12 @@ public class EurekaClientConfiguration implements SmartLifecycle, Ordered { @@ -119,6 +119,12 @@ public class EurekaClientConfiguration implements SmartLifecycle, Ordered {
return order;
}
@Bean
@ConditionalOnMissingBean(DiscoveryManagerIntitializer.class)
public DiscoveryManagerIntitializer discoveryManagerIntitializer() {
return new DiscoveryManagerIntitializer();
}
@Bean
@Lazy
@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS)

11
spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaServerInitializerConfiguration.java

@ -28,7 +28,9 @@ import org.apache.commons.logging.LogFactory; @@ -28,7 +28,9 @@ import org.apache.commons.logging.LogFactory;
import org.springframework.aop.framework.ProxyFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.netflix.eureka.DiscoveryManagerIntitializer;
import org.springframework.cloud.netflix.eureka.EurekaServerConfigBean;
import org.springframework.cloud.netflix.eureka.advice.PiggybackMethodInterceptor;
import org.springframework.cloud.netflix.eureka.event.EurekaRegistryAvailableEvent;
@ -79,9 +81,16 @@ public class EurekaServerInitializerConfiguration implements ServletContextAware @@ -79,9 +81,16 @@ public class EurekaServerInitializerConfiguration implements ServletContextAware
this.servletContext = servletContext;
}
@Bean
@ConditionalOnMissingBean(DiscoveryManagerIntitializer.class)
public DiscoveryManagerIntitializer discoveryManagerIntitializer() {
return new DiscoveryManagerIntitializer();
}
@Override
public void start() {
new Thread(new Runnable() {
discoveryManagerIntitializer().init();
new Thread(new Runnable() {
@Override
public void run() {
try {

Loading…
Cancel
Save