consul
Consul client module.
Exports a Consul client.
Also register the application as a service and setup a health check.
dependency
<dependency>
<groupId>org.jooby</groupId>
<artifactId>jooby-consul</artifactId>
<version>1.6.6</version>
</dependency>
usage
{
use(new Consulby());
get("/myservice/health", req -> {
Consul consul = require(Consul.class);
List<ServiceHealth> serviceHealths = consul.healthClient()
.getHealthyServiceInstances("myservice")
.getResponse();
return serviceHealths;
});
}
configuration
Configuration is done via .conf
.
For example, one can change the consul endpoint url, change the advertised service host, and disable registration health check:
consul.default.url = "http://consul.internal.domain.com:8500"
consul.default.register.host = 10.0.0.2
consul.default.register.check = null
or, disable the automatic registration feature completely:
consul.default.register = null
Also, Consul
and Registration
objects can be configured programmatically:
{
use(new Consulby()
.withConsulBuilder(consulBuilder -> {
consulBuilder.withPing(false);
consulBuilder.withBasicAuth("admin", "changeme");
})
.withRegistrationBuilder(registrationBuilder -> {
registrationBuilder.enableTagOverride(true);
registrationBuilder.id("custom-service-id");
}));
}
multiple consul
The module can be instantiated more than one time to allow connecting to many Consul installations:
{
use(new Consulby("consul1"));
use(new Consulby("consul2"));
}
Since the module will fallback on the consul.default
config prefix, it is possible to only override the desired properties in the .conf
, for example, here, disabling health check only for consul2
:
consul.consul1.url = "http://consul1.internal.domain.com:8500"
consul.consul2.url = "http://consul2.internal.domain.com:8500"
consul.consul2.register.check = null
consul.conf
consul {
default {
url = "http://localhost:8500"
register {
name = ${application.name}
host = ${application.host}
port = ${application.port}
tags = []
check {
path = /health
response = ${application.name}-${application.version}
interval = 15s
timeout = 5s
}
}
}
}