package netflix.karyon.eureka; import com.google.inject.AbstractModule; import com.google.inject.binder.LinkedBindingBuilder; import com.netflix.appinfo.ApplicationInfoManager; import com.netflix.appinfo.EurekaInstanceConfig; import com.netflix.appinfo.providers.CloudInstanceConfigProvider; import com.netflix.discovery.DiscoveryClient; import com.netflix.discovery.EurekaClientConfig; import com.netflix.discovery.EurekaNamespace; import com.netflix.discovery.providers.DefaultEurekaClientConfigProvider; import com.netflix.governator.guice.BootstrapModule; import netflix.karyon.Karyon; /** * Initialize Eureka, by binding the "eureka." namespace and adding providers for EurekaClientConfig * and EurekaInstanceConfig. * * @author Nitesh Kant */ public class KaryonEurekaModule extends AbstractModule { private final String eurekaNamespace; public KaryonEurekaModule() { this("eureka."); } public KaryonEurekaModule(String eurekaNamespace) { this.eurekaNamespace = eurekaNamespace; } @Override protected void configure() { bind(com.netflix.appinfo.HealthCheckHandler.class).to(EurekaHealthCheckHandler.class); bind(ApplicationInfoManager.class).asEagerSingleton(); bind(DiscoveryClient.class).asEagerSingleton(); configureEureka(); } protected void configureEureka() { bindEurekaNamespace().toInstance(eurekaNamespace); bindEurekaInstanceConfig().toProvider(CloudInstanceConfigProvider.class); bindEurekaClientConfig().toProvider(DefaultEurekaClientConfigProvider.class); } protected LinkedBindingBuilder<EurekaInstanceConfig> bindEurekaInstanceConfig() { return bind(EurekaInstanceConfig.class); } protected LinkedBindingBuilder<EurekaClientConfig > bindEurekaClientConfig() { return bind(EurekaClientConfig.class); } protected LinkedBindingBuilder<String> bindEurekaNamespace() { return bind(String.class).annotatedWith(EurekaNamespace.class); } public static BootstrapModule asBootstrapModule() { return Karyon.toBootstrapModule(KaryonEurekaModule.class); } }