private String getRegistrationUri() { return "http://" + serviceProps.getRegistryServer() + "/v1/agent/service/register"; }
protected String getServiceHealthUri() { String retval = "http://" + serviceProps.getRegistryServer() + "/v1/health/service/" + serviceName + "?stale"; if (healthEndpointCalled.get() && consulIndex != null) { retval += "&index=" + consulIndex; } else { healthEndpointCalled.set(true); } return retval; }
private String getHealthCheckUri(HealthCheck.Status status) { StringBuilder sb = new StringBuilder("http://").append(serviceProps.getRegistryServer()). append("/v1/agent/check/").append(status.getConsulStatus()).append("/service:"). append(serviceId); return sb.toString(); }
protected void unregisterService() { if (! isRegistered.get()) { return; } try { logger.info("Unregistering {}", serviceName); String registryServer = serviceProps.getRegistryServer(); int colon = registryServer.indexOf(':'); String hostname = registryServer.substring(0, colon); int port = Integer.parseInt(registryServer.substring(colon + 1)); Socket sock = new Socket(hostname, port); OutputStream out = sock.getOutputStream(); out.write(unregisterString.getBytes()); out.flush(); sock.close(); if (isShutdownHookRegistered.get()) { isShutdownHookRegistered.set(false); } } catch (Exception ex) { logger.error("Error unregistering from consul", ex); } }
@Override public void run() { if (serviceName == null) { throw new IllegalStateException("Service name was not set"); } if (StringUtils.isBlank(serviceProps.getRegistryServer())) { logger.error("registryServer was not specified"); return; } else { logger.info("Will use consul server at {}", serviceProps.getRegistryServer()); } //don't start polling until we are properly initialized, even if the initial result was empty List<ConsulHealthEntry> instances = loadCurrentHealthList(); while (instances.isEmpty()) { sleeper.sleepNoException(1000); instances = loadCurrentHealthList(); logger.debug("Received {} health entries for {}", instances.size(), serviceName); } reportInitialServicesList(instances); //TODO: detect if multiple AZs; if multiple AZs, determine AZ sort order //TODO: instances = sortByAvailabilityZone(instances); while (true) { watchForUpdates(); if (shutdownSemaphore.tryAcquire()) { logger.debug("Shutdown semaphore acquired"); break; } } }
private boolean verifyRegistrationInConsul() { String registryServer = serviceProps.getRegistryServer(); if (StringUtils.isBlank(registryServer)) { return false; } String url = "http://" + registryServer + "/v1/catalog/service/" + serviceProps.getServiceName(); try { ContentResponse httpResponse = httpClient.newRequest(url). method(HttpMethod.GET).header(HttpHeader.CONTENT_TYPE, "application/json").send(); if (httpResponse.getStatus() != 200) { return false; } JsonArray pods = new JsonParser().parse(httpResponse.getContentAsString()).getAsJsonArray(); Iterator<JsonElement> iter = pods.iterator(); while (iter.hasNext()) { JsonElement pod = iter.next(); String serviceId = pod.getAsJsonObject().get("ServiceID").getAsString(); if (serviceProps.getServiceInstanceId().equals(serviceId)) { return true; } } } catch (Exception ex) { logger.warn("Caught exception verifying registration", ex); } return false; }