Skip to content

nats-io/java-nats-server-runner

Repository files navigation

NATS

Java Nats Server Runner

Run the NATS messaging system Server from your Java code.

License Apache 2 Maven Central Javadoc Coverage Status Build Main Badge Release Badge

Useful for running unit or integration tests on the localhost.

Executable

By default, the server is found in your path in this order:

  • the executablePath set in the builder
  • the path found in the nats_server_path environment variable
  • the path set via NatsRunnerUtils.setServerPath (deprecated, prefer setting in builder)
  • nats-server somewhere in the machine's path.

For simple setup, constructors work well

try (NatsServerRunner server = new NatsServerRunner()) {
    System.out.println("Server running on port: " + server.getPort())
    Connection c = Nats.connect(server.getURI());
    ...
}

Builder

For more complicated setup, use the NatsServerRunnerBuilder

String[] customInserts = new String[] {
    "server_name=srv1",
    "cluster {",
    "  name: testcluster",
    "  listen: 127.0.0.1:4222",
    "  routes: [",
    "    nats-route://127.0.0.2:4222",
    "    nats-route://127.0.0.3:4222",
    "  ]",
    "}",
    ""
};

NatsServerRunner.Builder builder = NatsServerRunner.builder()
    .port(4567)
    .debugLevel(DebugLevel.DEBUG_TRACE)
    .jetstream(true)
    .executablePath("/this/run/only/nats-server")
    .configFilePath("/mypath/custom.conf")
    .configInserts(customInserts);

try (NatsServerRunner server = builder.build()) {
} 
catch (Exception e) {
    throw new RuntimeException(e);
}

Static Settings

If you want to run multiple instances of the server, for instance in unit tests, you can do some setup statically to reduce the code in the builders. A simple way to do this would be to have a static initializer in base test class or something that is called before all uses. There are 3 methods available:

static {
    NatsServerRunner.setDefaultOutputSupplier(ConsoleOutput::new);
    NatsServerRunner.setDefaultOutputLevel(Level.WARNING);
    NatsServerRunner.setPreferredServerPath("/path/to/nats-server")
}

License

Unless otherwise noted, the NATS source files are distributed under the Apache Version 2.0 license found in the LICENSE file.