use of com.spotify.apollo.meta.MetaDescriptor in project apollo by spotify.
the class HttpService method boot.
/**
* Boot up a service and wait for it to shut down.
*
* @param service the service to start
* @param instanceListener gets called when a service instance has been created
* @param uncaughtExceptionHandler an exception handler that gets invoked for the current thread
* if any uncaught exceptions are thrown during service startup
* or while waiting for it to shut down.
* @param args arguments to the service
* @throws LoadingException in case of an error starting up
*/
public static void boot(Service service, InstanceListener instanceListener, Thread.UncaughtExceptionHandler uncaughtExceptionHandler, String... args) throws LoadingException {
Objects.requireNonNull(uncaughtExceptionHandler);
Thread.currentThread().setUncaughtExceptionHandler(uncaughtExceptionHandler);
LOG.debug("Trying to create instance of service {} with args {}", service.getServiceName(), args);
try (Service.Instance instance = service.start(args)) {
final RequestHandler requestHandler = HttpServiceModule.requestHandler(instance);
HttpServerModule.server(instance).start(requestHandler);
final String serviceName = service.getServiceName();
final MetaDescriptor metaDescriptor = instance.resolve(MetaDescriptor.class);
final ApolloConfig config = instance.resolve(ApolloConfig.class);
LOG.info("Started {} {} (apollo {}) with backend domain '{}'", serviceName, metaDescriptor.descriptor().version(), metaDescriptor.apolloVersion(), config.backend());
if (instanceListener != null) {
instanceListener.instanceCreated(instance);
}
instance.waitForShutdown();
LOG.info("Starting shutdown of {} ...", serviceName);
} catch (IOException e) {
throw failure(e, "Failed to start service");
} catch (InterruptedException e) {
throw failure(e, "Service interrupted");
} catch (Exception e) {
throw failure(e, "Something went wrong");
}
LOG.info("Shutdown of {} complete", service.getServiceName());
}
Aggregations