Search in sources :

Example 1 with MetaDescriptor

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());
}
Also used : MetaDescriptor(com.spotify.apollo.meta.MetaDescriptor) RequestHandler(com.spotify.apollo.request.RequestHandler) ApolloConfig(com.spotify.apollo.environment.ApolloConfig) Service(com.spotify.apollo.core.Service) IOException(java.io.IOException) IOException(java.io.IOException)

Aggregations

Service (com.spotify.apollo.core.Service)1 ApolloConfig (com.spotify.apollo.environment.ApolloConfig)1 MetaDescriptor (com.spotify.apollo.meta.MetaDescriptor)1 RequestHandler (com.spotify.apollo.request.RequestHandler)1 IOException (java.io.IOException)1