use of com.spotify.apollo.core.Service in project zoltar by spotify.
the class ServiceRunner method main.
/**
* Runs the app locally.
*
* <p>$ curl http://localhost:8080/predict/5.8-2.7-5.1-1.9 Lengths seperated by "-"
*/
public static void main(final String... args) throws LoadingException {
final Service service = HttpService.usingAppInit(ServiceRunner::configure, SERVICE_NAME).build();
HttpService.boot(service, args);
}
use of com.spotify.apollo.core.Service 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());
}
use of com.spotify.apollo.core.Service in project apollo by spotify.
the class HttpServiceModuleTest method shouldDestroyApplicationOnExit.
@Test
public void shouldDestroyApplicationOnExit() throws Exception {
final AtomicBoolean init = new AtomicBoolean();
final AtomicBoolean destroy = new AtomicBoolean();
final App app = new App(init, destroy);
try (Service.Instance i = service(app).start()) {
final RequestHandler handler = HttpServiceModule.requestHandler(i);
assertNotNull(handler);
// not calling environment.close()
} catch (IOException e) {
fail(e.getMessage());
}
assertTrue(init.get());
assertTrue(destroy.get());
}
use of com.spotify.apollo.core.Service in project apollo by spotify.
the class ApolloEnvironmentModuleTest method shouldUseEndpointRunnableFactoryDecorator.
@Test
public void shouldUseEndpointRunnableFactoryDecorator() throws Exception {
AtomicReference<String> lastResponseRef = new AtomicReference<>();
final Service service = this.service.withModule(new LastResponseModule(lastResponseRef)).build();
try (Service.Instance i = service.start()) {
final ApolloEnvironment environment = ApolloEnvironmentModule.environment(i);
final RequestHandler handler = environment.initialize(env -> {
env.routingEngine().registerAutoRoute(Route.sync("GET", "/", ctx -> "hello"));
});
assertNotNull(handler);
final FakeOngoingRequest ongoingRequest = ongoingRequest("http://foo");
handler.handle(ongoingRequest);
assertThat(ongoingRequest.getReply(), hasStatus(Status.GONE));
assertEquals("hello", lastResponseRef.get());
} catch (IOException e) {
fail(e.getMessage());
}
}
use of com.spotify.apollo.core.Service in project apollo by spotify.
the class ExampleService method main.
public static void main(String... args) throws LoadingException {
final Service service = HttpService.usingAppInit(ExampleService::init, "ping").build();
HttpService.boot(service, args);
LOG.info("bye bye");
}
Aggregations