diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientConfiguration.java index 39f18189..d6a90859 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientConfiguration.java @@ -17,6 +17,7 @@ package org.springframework.cloud.netflix.eureka; import javax.annotation.PreDestroy; +import com.netflix.appinfo.HealthCheckHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -62,6 +63,9 @@ public class EurekaClientConfiguration implements SmartLifecycle, Ordered { @Autowired private EurekaInstanceConfigBean instanceConfig; + @Autowired(required = false) + private HealthCheckHandler healthCheckHandler; + @PreDestroy public void close() { logger.info("Removing application {} from eureka", instanceConfig.getAppname()); @@ -78,9 +82,14 @@ public class EurekaClientConfiguration implements SmartLifecycle, Ordered { //because of containerPortInitializer below if (!running && instanceConfig.getNonSecurePort() > 0) { discoveryManagerIntitializer().init(); + logger.info("Registering application {} with eureka with status {}", instanceConfig.getAppname(), instanceConfig.getInitialStatus()); ApplicationInfoManager.getInstance().setInstanceStatus(instanceConfig.getInitialStatus()); + + if (healthCheckHandler != null) { + DiscoveryManager.getInstance().getDiscoveryClient().registerHealthCheck(healthCheckHandler); + } running = true; } } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/eureka/sample/Application.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/eureka/sample/Application.java index 34a37657..68e0b2ce 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/eureka/sample/Application.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/eureka/sample/Application.java @@ -1,8 +1,11 @@ package org.springframework.cloud.netflix.eureka.sample; +import com.netflix.appinfo.HealthCheckHandler; +import com.netflix.appinfo.InstanceInfo; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.bind.annotation.RequestMapping; @@ -15,6 +18,16 @@ import org.springframework.web.bind.annotation.RestController; @EnableEurekaClient public class Application { + @Bean + public HealthCheckHandler healthCheckHandler() { + return new HealthCheckHandler() { + @Override + public InstanceInfo.InstanceStatus getStatus(InstanceInfo.InstanceStatus currentStatus) { + return InstanceInfo.InstanceStatus.UP; + } + }; + } + @RequestMapping("/") public String home() { return "Hello world";