public boolean ping()

in solutions/solution-basic/src/main/java/org/apache/servicecomb/solution/basic/health/HealthInstancePing.java [58:105]


  public boolean ping(StatefulDiscoveryInstance instance) {
    if (CollectionUtils.isEmpty(instance.getEndpoints())) {
      return false;
    }

    // hard coded here, not very nice
    if ("local-registry".equals(instance.getRegistryName())) {
      return telnetInstancePing.ping(instance);
    }

    Map<String, Object> args = new HashMap<>(2);
    args.put("instanceId", instance.getInstanceId());
    args.put("registryName", instance.getRegistryName());

    for (String endpoint : instance.getEndpoints()) {
      URI uri = URI.create(endpoint);
      String transportName = uri.getScheme();
      Transport transport = scbEngine.getTransportManager().findTransport(transportName);
      if (transport == null) {
        continue;
      }
      Invocation invocation = InvokerUtils.createInvocation(instance.getServiceName(), transportName,
          "HealthEndpoint", "health",
          args, boolean.class);
      invocation.setEndpoint(new Endpoint(transport, endpoint, instance));
      boolean result;
      try {
        result = (boolean) InvokerUtils.syncInvoke(invocation);
      } catch (Exception e) {
        LOGGER.warn("ping instance {}/{}/{}/{} endpoint {} failed. {}",
            instance.getApplication(),
            instance.getServiceName(),
            instance.getRegistryName(),
            instance.getInstanceId(), endpoint, e.getMessage());
        continue;
      }
      if (result) {
        return true;
      }
      LOGGER.warn("ping instance {}/{}/{}/{} endpoint {} failed",
          instance.getApplication(),
          instance.getServiceName(),
          instance.getRegistryName(),
          instance.getInstanceId(), endpoint);
    }

    return false;
  }