use of io.gravitee.definition.model.services.discovery.EndpointDiscoveryService in project gravitee-gateway by gravitee-io.
the class EndpointDiscoveryConsulVerticle method startWatch.
private void startWatch(Api api) {
EndpointDiscoveryService discoveryService = api.getServices().get(EndpointDiscoveryService.class);
if (api.isEnabled() && discoveryService != null && discoveryService.getProvider() == EndpointDiscoveryProvider.CONSUL) {
LOGGER.info("Add Consul.io support for API id[{}] name[{}]", api.getId(), api.getName());
ConsulEndpointDiscoveryConfiguration providerConfiguration = (ConsulEndpointDiscoveryConfiguration) discoveryService.getConfiguration();
URI consulUri = URI.create(providerConfiguration.getUrl());
ConsulClientOptions options = new ConsulClientOptions().setHost(consulUri.getHost()).setPort((consulUri.getPort() != -1) ? consulUri.getPort() : CONSUL_DEFAULT_PORT).setDc(providerConfiguration.getDc()).setAclToken(providerConfiguration.getAcl());
if (HTTPS_SCHEME.equalsIgnoreCase(consulUri.getScheme())) {
// SSL is not configured but the endpoint scheme is HTTPS so let's enable the SSL on Vert.x HTTP client
// automatically
options.setSsl(true).setTrustAll(true);
}
LOGGER.info("Consul.io configuration: endpoint[{}] dc[{}] acl[{}]", consulUri.toString(), options.getDc(), options.getAclToken());
Watch<ServiceEntryList> watch = Watch.service(providerConfiguration.getService(), vertx, options);
watch.setHandler(event -> {
if (event.succeeded()) {
LOGGER.debug("Receiving a Consul.io watch event for service: name[{}]", providerConfiguration.getService());
List<ServiceEntry> entries = event.nextResult().getList();
// Handle new services or updated services
for (ServiceEntry service : event.nextResult().getList()) {
Service service1 = service.getService();
service1.setNodeAddress(service.getNode().getAddress());
handleRegisterService(api, service1);
}
// Handle de-registered services
if (event.prevResult() != null) {
List<ServiceEntry> oldEntries = event.prevResult().getList();
if (oldEntries.size() > entries.size()) {
// Select only de-registered services
oldEntries.removeAll(entries);
for (ServiceEntry oldEntry : oldEntries) {
handleDeregisterService(api, oldEntry.getService());
}
}
}
} else {
LOGGER.info("Unexpected error while watching services catalog", event.cause());
}
}).start();
this.watches.put(api.getId(), watch);
}
}
Aggregations