use of com.networknt.consul.ConsulService in project light-4j by networknt.
the class ConsulClientImpl method convertToConsulService.
private ConsulService convertToConsulService(Map<String, Object> serviceMap) {
ConsulService service = new ConsulService();
service.setAddress((String) serviceMap.get("Address"));
service.setId((String) serviceMap.get("ID"));
service.setName((String) serviceMap.get("Service"));
service.setPort((Integer) serviceMap.get("Port"));
service.setTags((List) serviceMap.get("Tags"));
return service;
}
use of com.networknt.consul.ConsulService in project light-4j by networknt.
the class ConsulClientImpl method lookupHealthService.
@Override
public ConsulResponse<List<ConsulService>> lookupHealthService(String serviceName, String tag, long lastConsulIndex, String token) {
ConsulResponse<List<ConsulService>> newResponse = null;
String path = "/v1/health/service/" + serviceName + "?passing&wait=600s&index=" + lastConsulIndex;
if (tag != null) {
path = path + "&tag=" + tag;
}
if (logger.isDebugEnabled())
logger.debug("path = " + path);
ClientConnection connection = null;
try {
connection = client.connect(new URI(url), Http2Client.WORKER, Http2Client.SSL, Http2Client.POOL, OptionMap.EMPTY).get();
} catch (Exception e) {
logger.error("Exeption:", e);
}
final CountDownLatch latch = new CountDownLatch(1);
final AtomicReference<ClientResponse> reference = new AtomicReference<>();
try {
ClientRequest request = new ClientRequest().setMethod(Methods.GET).setPath(path);
if (token != null)
request.getRequestHeaders().put(Constants.CONSUL_TOKEN, token);
request.getRequestHeaders().put(Headers.HOST, "localhost");
connection.sendRequest(request, client.createClientCallback(reference, latch));
latch.await();
int statusCode = reference.get().getResponseCode();
if (statusCode >= 300) {
System.out.println("body = " + reference.get().getAttachment(Http2Client.RESPONSE_BODY));
throw new Exception("Failed to unregister on Consul: " + statusCode);
} else {
String body = reference.get().getAttachment(Http2Client.RESPONSE_BODY);
System.out.println("body = " + body);
List<Map<String, Object>> services = Config.getInstance().getMapper().readValue(body, new TypeReference<List<Map<String, Object>>>() {
});
List<ConsulService> ConsulServcies = new ArrayList<>(services.size());
for (Map<String, Object> service : services) {
ConsulService newService = convertToConsulService((Map<String, Object>) service.get("Service"));
ConsulServcies.add(newService);
}
if (!ConsulServcies.isEmpty()) {
newResponse = new ConsulResponse<>();
newResponse.setValue(ConsulServcies);
newResponse.setConsulIndex(Long.parseLong(reference.get().getResponseHeaders().getFirst("X-Consul-Index")));
newResponse.setConsulLastContact(Long.parseLong(reference.get().getResponseHeaders().getFirst("X-Consul-Lastcontact")));
newResponse.setConsulKnownLeader(Boolean.parseBoolean(reference.get().getResponseHeaders().getFirst("X-Consul-Knownleader")));
}
}
} catch (Exception e) {
logger.error("Exception:", e);
} finally {
IoUtils.safeClose(connection);
}
return newResponse;
}
Aggregations