package com.netflix.eureka;
import com.google.inject.AbstractModule;
import com.netflix.appinfo.EurekaInstanceConfig;
import com.netflix.appinfo.MyDataCenterInstanceConfig;
import com.netflix.config.DynamicPropertyFactory;
import com.netflix.discovery.guice.EurekaModule;
import com.netflix.governator.InjectorBuilder;
import com.netflix.governator.LifecycleInjector;
/**
* Sample Eureka service that registers with Eureka to receive and process requests, using EurekaModule.
*/
public class ExampleEurekaGovernatedService {
static class ExampleServiceModule extends AbstractModule {
@Override
protected void configure() {
bind(ExampleServiceBase.class).asEagerSingleton();
}
}
private static LifecycleInjector init() throws Exception {
System.out.println("Creating injector for Example Service");
LifecycleInjector injector = InjectorBuilder
.fromModules(new EurekaModule(), new ExampleServiceModule())
.overrideWith(new AbstractModule() {
@Override
protected void configure() {
DynamicPropertyFactory configInstance = com.netflix.config.DynamicPropertyFactory.getInstance();
bind(DynamicPropertyFactory.class).toInstance(configInstance);
// the default impl of EurekaInstanceConfig is CloudInstanceConfig, which we only want in an AWS
// environment. Here we override that by binding MyDataCenterInstanceConfig to EurekaInstanceConfig.
bind(EurekaInstanceConfig.class).to(MyDataCenterInstanceConfig.class);
// (DiscoveryClient optional bindings) bind the optional event bus
// bind(EventBus.class).to(EventBusImpl.class).in(Scopes.SINGLETON);
}
})
.createInjector();
System.out.println("Done creating the injector");
return injector;
}
public static void main(String[] args) throws Exception {
LifecycleInjector injector = null;
try {
injector = init();
injector.awaitTermination();
} catch (Exception e) {
System.out.println("Error starting the sample service: " + e);
e.printStackTrace();
} finally {
if (injector != null) {
injector.shutdown();
}
}
}
}