This is an automated email from the ASF dual-hosted git repository.

liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/master by this push:
     new 03112df  add updateInstanceStatus to ServiceRegistryClient.java
03112df is described below

commit 03112dfbe69ba15a1ed0ce203bae563dacd7b8f1
Author: z00380117 <[email protected]>
AuthorDate: Wed Nov 20 14:53:14 2019 +0800

    add updateInstanceStatus to ServiceRegistryClient.java
---
 .../servicecomb/serviceregistry/api/Const.java     | 13 ++++++++-
 .../client/LocalServiceRegistryClientImpl.java     | 29 ++++++++++++++++++
 .../client/ServiceRegistryClient.java              |  9 ++++++
 .../client/http/ServiceRegistryClientImpl.java     | 34 ++++++++++++++++++++++
 4 files changed, 84 insertions(+), 1 deletion(-)

diff --git 
a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/Const.java
 
b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/Const.java
index 1092f05..78e625a 100644
--- 
a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/Const.java
+++ 
b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/Const.java
@@ -31,7 +31,7 @@ public final class Const {
 
     public static final String CURRENT_VERSION = 
ServiceRegistryConfig.INSTANCE.getRegistryApiVersion();
 
-    // 2017-10-21 add new implementations for v4. We can remove v3 support 
after a period. 
+    // 2017-10-21 add new implementations for v4. We can remove v3 support 
after a period.
     public static final String VERSION_V3 = "v3";
 
     public static final String LATEST_API_VERSION = "v4";
@@ -167,6 +167,17 @@ public final class Const {
         SERVICECENTER_VERSION = V4_PREFIX + "/version";
       }
     }
+
+    public static final String MICROSERVICE_INSTANCE_STATUS;
+
+    static {
+      if (VERSION_V3.equals(CURRENT_VERSION)) {
+        MICROSERVICE_INSTANCE_STATUS = 
"/registry/v3/microservices/%s/instances/%s/status";
+      } else {
+        MICROSERVICE_INSTANCE_STATUS = V4_PREFIX + 
"/microservices/%s/instances/%s/status";
+      }
+    }
+
   }
 
   public static final String REGISTRY_APP_ID = "default";
diff --git 
a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/LocalServiceRegistryClientImpl.java
 
b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/LocalServiceRegistryClientImpl.java
index 77919c1..823181e 100755
--- 
a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/LocalServiceRegistryClientImpl.java
+++ 
b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/LocalServiceRegistryClientImpl.java
@@ -33,6 +33,7 @@ import javax.ws.rs.core.Response.Status;
 import org.apache.servicecomb.foundation.vertx.AsyncResultCallback;
 import org.apache.servicecomb.serviceregistry.api.registry.Microservice;
 import 
org.apache.servicecomb.serviceregistry.api.registry.MicroserviceInstance;
+import 
org.apache.servicecomb.serviceregistry.api.registry.MicroserviceInstanceStatus;
 import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterConfig;
 import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterInfo;
 import 
org.apache.servicecomb.serviceregistry.api.response.FindInstancesResponse;
@@ -429,4 +430,32 @@ public class LocalServiceRegistryClientImpl implements 
ServiceRegistryClient {
     info.setConfig(new ServiceCenterConfig());
     return info;
   }
+
+  @Override
+  public boolean undateMicroserviceInstanceStatus(String microserviceId, 
String microserviceInstanceId, String status) {
+    Map<String, MicroserviceInstance> instanceMap = 
microserviceInstanceMap.get(microserviceId);
+    if (instanceMap == null) {
+      throw new IllegalArgumentException("Invalid serviceId, serviceId=" + 
microserviceId);
+    }
+
+    MicroserviceInstance microserviceInstance = 
instanceMap.get(microserviceInstanceId);
+    if (microserviceInstance == null) {
+      throw new IllegalArgumentException(
+              String.format("Invalid argument. microserviceId=%s, 
microserviceInstanceId=%s.",
+                      microserviceId,
+                      microserviceInstanceId));
+    }
+    MicroserviceInstanceStatus instanceStatus;
+    try {
+      instanceStatus = MicroserviceInstanceStatus.valueOf(status);
+    }
+    catch (IllegalArgumentException e){
+      throw new IllegalArgumentException("Invalid status.");
+    }
+    if (null != instanceStatus) {
+      microserviceInstance.setStatus(instanceStatus);
+      return true;
+    }
+    return false;
+  }
 }
diff --git 
a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/ServiceRegistryClient.java
 
b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/ServiceRegistryClient.java
index 90d1455..81f61bf 100644
--- 
a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/ServiceRegistryClient.java
+++ 
b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/ServiceRegistryClient.java
@@ -23,6 +23,7 @@ import java.util.Map;
 import org.apache.servicecomb.foundation.vertx.AsyncResultCallback;
 import org.apache.servicecomb.serviceregistry.api.registry.Microservice;
 import 
org.apache.servicecomb.serviceregistry.api.registry.MicroserviceInstance;
+import 
org.apache.servicecomb.serviceregistry.api.registry.MicroserviceInstanceStatus;
 import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterInfo;
 import org.apache.servicecomb.serviceregistry.api.response.GetSchemaResponse;
 import org.apache.servicecomb.serviceregistry.api.response.HeartbeatResponse;
@@ -172,4 +173,12 @@ public interface ServiceRegistryClient {
    * get ServiceCenterVersionInfo
    */
   ServiceCenterInfo getServiceCenterInfo();
+
+  /**
+   * 修改微服务实例状态
+   * @param microserviceId
+   * @param microserviceInstanceId
+   * @return
+   */
+  boolean undateMicroserviceInstanceStatus(String microserviceId, String 
microserviceInstanceId, String status);
 }
diff --git 
a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/ServiceRegistryClientImpl.java
 
b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/ServiceRegistryClientImpl.java
index 34ffd8c..3c5930f 100644
--- 
a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/ServiceRegistryClientImpl.java
+++ 
b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/ServiceRegistryClientImpl.java
@@ -62,6 +62,7 @@ import 
org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient;
 import org.apache.servicecomb.serviceregistry.config.ServiceRegistryConfig;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.util.StringUtils;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.cache.CacheBuilder;
@@ -901,4 +902,37 @@ public final class ServiceRegistryClientImpl implements 
ServiceRegistryClient {
     }
     return null;
   }
+
+  @Override
+  public boolean undateMicroserviceInstanceStatus(String microserviceId, 
String microserviceInstanceId, String status) {
+    Holder<HttpClientResponse> holder = new Holder<>();
+    IpPort ipPort = ipPortManager.getAvailableAddress();
+    try {
+      if (LOGGER.isDebugEnabled()) {
+        LOGGER.debug("update status of microservice instance: {}", status);
+      }
+      String url = 
String.format(Const.REGISTRY_API.MICROSERVICE_INSTANCE_STATUS, microserviceId, 
microserviceInstanceId);
+      if (StringUtils.isEmpty(status)) {
+        LOGGER.debug("empty status");
+        return false;
+      }
+      Map<String, String[]> queryParams = new HashMap<>();
+      queryParams.put("value", new String[] {status});
+      CountDownLatch countDownLatch = new CountDownLatch(1);
+      RestUtils.put(ipPort, url, new 
RequestParam().setQueryParams(queryParams), syncHandler(countDownLatch, 
HttpClientResponse.class, holder));
+      countDownLatch.await();
+      if (holder.value != null) {
+        if (holder.value.statusCode() == Status.OK.getStatusCode()) {
+          return true;
+        }
+        LOGGER.warn(holder.value.statusMessage());
+      }
+    } catch (Exception e) {
+      LOGGER.error("update status of microservice instance {}/{} failed",
+              microserviceId,
+              microserviceInstanceId,
+              e);
+    }
+    return false;
+  }
 }

Reply via email to