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;
+ }
}