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 0668f6308 Submit a feature that applies graceful up and down (#4670)
0668f6308 is described below

commit 0668f6308dfcd20a0fd17798206b8fe021b18ceb
Author: chenshouye168 <[email protected]>
AuthorDate: Mon Jan 13 09:41:30 2025 +0800

    Submit a feature that applies graceful up and down (#4670)
---
 .../org/apache/servicecomb/core/SCBEngine.java     |  2 -
 .../servicecomb/registry/DiscoveryManager.java     |  2 +-
 .../registry/api/MicroserviceInstance.java         |  6 +++
 .../registry/api/RegistrationInstance.java         | 11 -----
 .../discovery/InstanceStatusDiscoveryFilter.java   |  6 +--
 .../discovery/StatefulDiscoveryInstance.java       | 11 -----
 .../TestInstanceStatusDiscoveryFilter.java         |  8 ++--
 .../src/test/resources/log4j2.xml                  | 20 ++++----
 service-registry/registry-consul/pom.xml           |  4 +-
 .../registry/consul/ConsulConfiguration.java       |  4 +-
 .../registry/consul/ConsulDiscovery.java           |  5 +-
 .../registry/consul/ConsulDiscoveryInstance.java   | 22 ++++-----
 .../registry/consul/ConsulInstance.java            |  8 +++-
 .../registry/consul/ConsulRegistration.java        |  2 +
 .../consul/ConsulRegistrationInstance.java         | 12 +----
 .../registry/consul/config/ConsulProperties.java   |  1 +
 .../servicecomb/registry/etcd/EtcdInstance.java    |  8 +++-
 .../registry/etcd/EtcdRegistrationInstance.java    | 11 -----
 .../localregistry/LocalRegistrationInstance.java   |  7 +--
 service-registry/registry-nacos/pom.xml            | 56 +++++++++++-----------
 .../servicecomb/registry/nacos/NacosConst.java     |  2 +
 .../servicecomb/registry/nacos/NacosDiscovery.java |  1 +
 .../registry/nacos/NacosDiscoveryInstance.java     | 10 +++-
 .../registry/nacos/NacosRegistration.java          | 15 ++++--
 .../registry/nacos/NacosRegistrationInstance.java  |  9 +---
 .../registry/sc/MicroserviceHandler.java           |  3 +-
 .../registry/sc/SCConfigurationProperties.java     | 10 ----
 .../registry/sc/SCDiscoveryInstance.java           |  9 ++--
 .../servicecomb/registry/sc/SCRegistration.java    |  1 -
 .../registry/sc/SCRegistrationInstance.java        | 10 +---
 .../zeroconfig/ZeroConfigRegistrationInstance.java |  7 +--
 .../zookeeper/ZookeeperDiscoveryInstance.java      |  6 ---
 .../registry/zookeeper/ZookeeperInstance.java      | 15 +++++-
 .../registry/zookeeper/ZookeeperRegistration.java  | 14 +++++-
 .../zookeeper/ZookeeperRegistrationInstance.java   | 11 -----
 35 files changed, 153 insertions(+), 176 deletions(-)

diff --git a/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java 
b/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java
index 2d8b86818..c69521698 100644
--- a/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java
+++ b/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java
@@ -370,8 +370,6 @@ public class SCBEngine {
     triggerEvent(EventType.BEFORE_REGISTRY);
     registrationManager.run();
     discoveryManager.run();
-    // ensure can invoke services in AFTER_REGISTRY
-    
registrationManager.updateMicroserviceInstanceStatus(MicroserviceInstanceStatus.UP);
     status = SCBStatus.UP;
     triggerEvent(EventType.AFTER_REGISTRY);
 
diff --git 
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java
 
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java
index 2cbe83a24..edcd3b3ca 100644
--- 
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java
+++ 
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java
@@ -183,7 +183,7 @@ public class DiscoveryManager implements LifeCycle {
         continue;
       }
       if (instance.getHistoryStatus() == HistoryStatus.HISTORY
-          && instance.getMicroserviceInstanceStatus() == 
MicroserviceInstanceStatus.UP
+          && instance.getStatus() == MicroserviceInstanceStatus.UP
           && instance.getPingStatus() == PingStatus.OK
           && instance.getIsolationStatus() == IsolationStatus.NORMAL) {
         result.add(instance);
diff --git 
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/MicroserviceInstance.java
 
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/MicroserviceInstance.java
index 0dd6d0237..c5c872bee 100644
--- 
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/MicroserviceInstance.java
+++ 
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/MicroserviceInstance.java
@@ -93,4 +93,10 @@ public interface MicroserviceInstance {
   default String getServiceId() {
     return "";
   }
+
+  /**
+   * Service status(Required): status of this microservice.
+   *
+   */
+  MicroserviceInstanceStatus getStatus();
 }
diff --git 
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/RegistrationInstance.java
 
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/RegistrationInstance.java
index afe2bc7a8..a7d7cafda 100644
--- 
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/RegistrationInstance.java
+++ 
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/RegistrationInstance.java
@@ -20,15 +20,4 @@ package org.apache.servicecomb.registry.api;
  * Microserivce instance registration object.
  */
 public interface RegistrationInstance extends MicroserviceInstance {
-  /**
-   * Initial status when registering(Optional). This method is
-   * implementation specific and may be not used.
-   */
-  MicroserviceInstanceStatus getInitialStatus();
-
-  /**
-   * Ready status when microservice instance is ready for 
service(Optional).This method is
-   * implementation specific and may be not used.
-   */
-  MicroserviceInstanceStatus getReadyStatus();
 }
diff --git 
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/InstanceStatusDiscoveryFilter.java
 
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/InstanceStatusDiscoveryFilter.java
index ef60b4a3e..dd27dc973 100644
--- 
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/InstanceStatusDiscoveryFilter.java
+++ 
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/InstanceStatusDiscoveryFilter.java
@@ -69,21 +69,21 @@ public class InstanceStatusDiscoveryFilter extends 
AbstractGroupDiscoveryFilter
 
     for (StatefulDiscoveryInstance instance : instances) {
       if (HistoryStatus.CURRENT == instance.getHistoryStatus() &&
-          MicroserviceInstanceStatus.UP == 
instance.getMicroserviceInstanceStatus() &&
+          MicroserviceInstanceStatus.UP == instance.getStatus() &&
           PingStatus.OK == instance.getPingStatus() &&
           IsolationStatus.NORMAL == instance.getIsolationStatus()) {
         level0.add(instance);
         continue;
       }
       if (HistoryStatus.CURRENT == instance.getHistoryStatus() &&
-          MicroserviceInstanceStatus.UP == 
instance.getMicroserviceInstanceStatus() &&
+          MicroserviceInstanceStatus.UP == instance.getStatus() &&
           PingStatus.UNKNOWN == instance.getPingStatus() &&
           IsolationStatus.NORMAL == instance.getIsolationStatus()) {
         level1.add(instance);
         continue;
       }
       if (HistoryStatus.HISTORY == instance.getHistoryStatus() &&
-          MicroserviceInstanceStatus.UP == 
instance.getMicroserviceInstanceStatus() &&
+          MicroserviceInstanceStatus.UP == instance.getStatus() &&
           PingStatus.OK == instance.getPingStatus() &&
           IsolationStatus.NORMAL == instance.getIsolationStatus()) {
         level2.add(instance);
diff --git 
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/StatefulDiscoveryInstance.java
 
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/StatefulDiscoveryInstance.java
index f06ea936d..394b2b03c 100644
--- 
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/StatefulDiscoveryInstance.java
+++ 
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/StatefulDiscoveryInstance.java
@@ -46,8 +46,6 @@ public class StatefulDiscoveryInstance extends 
AbstractDiscoveryInstance {
 
   private final DiscoveryInstance discoveryInstance;
 
-  private MicroserviceInstanceStatus microserviceInstanceStatus = 
MicroserviceInstanceStatus.UP;
-
   private IsolationStatus isolationStatus = IsolationStatus.NORMAL;
 
   private long isolatedTime;
@@ -64,15 +62,6 @@ public class StatefulDiscoveryInstance extends 
AbstractDiscoveryInstance {
     this.discoveryInstance = discoveryInstance;
   }
 
-  public MicroserviceInstanceStatus getMicroserviceInstanceStatus() {
-    return microserviceInstanceStatus;
-  }
-
-  public void setMicroserviceInstanceStatus(
-      MicroserviceInstanceStatus microserviceInstanceStatus) {
-    this.microserviceInstanceStatus = microserviceInstanceStatus;
-  }
-
   public IsolationStatus getIsolationStatus() {
     return isolationStatus;
   }
diff --git 
a/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/discovery/TestInstanceStatusDiscoveryFilter.java
 
b/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/discovery/TestInstanceStatusDiscoveryFilter.java
index eeecc4200..8e7307098 100644
--- 
a/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/discovery/TestInstanceStatusDiscoveryFilter.java
+++ 
b/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/discovery/TestInstanceStatusDiscoveryFilter.java
@@ -36,22 +36,22 @@ public class TestInstanceStatusDiscoveryFilter {
     List<StatefulDiscoveryInstance> instances = new ArrayList<>();
     StatefulDiscoveryInstance instance1 = 
Mockito.mock(StatefulDiscoveryInstance.class);
     
Mockito.when(instance1.getHistoryStatus()).thenReturn(HistoryStatus.CURRENT);
-    
Mockito.when(instance1.getMicroserviceInstanceStatus()).thenReturn(MicroserviceInstanceStatus.UP);
+    
Mockito.when(instance1.getStatus()).thenReturn(MicroserviceInstanceStatus.UP);
     Mockito.when(instance1.getPingStatus()).thenReturn(PingStatus.OK);
     
Mockito.when(instance1.getIsolationStatus()).thenReturn(IsolationStatus.NORMAL);
     StatefulDiscoveryInstance instance2 = 
Mockito.mock(StatefulDiscoveryInstance.class);
     
Mockito.when(instance2.getHistoryStatus()).thenReturn(HistoryStatus.CURRENT);
-    
Mockito.when(instance2.getMicroserviceInstanceStatus()).thenReturn(MicroserviceInstanceStatus.UP);
+    
Mockito.when(instance2.getStatus()).thenReturn(MicroserviceInstanceStatus.UP);
     Mockito.when(instance2.getPingStatus()).thenReturn(PingStatus.UNKNOWN);
     
Mockito.when(instance2.getIsolationStatus()).thenReturn(IsolationStatus.NORMAL);
     StatefulDiscoveryInstance instance3 = 
Mockito.mock(StatefulDiscoveryInstance.class);
     
Mockito.when(instance3.getHistoryStatus()).thenReturn(HistoryStatus.HISTORY);
-    
Mockito.when(instance3.getMicroserviceInstanceStatus()).thenReturn(MicroserviceInstanceStatus.UP);
+    
Mockito.when(instance3.getStatus()).thenReturn(MicroserviceInstanceStatus.UP);
     Mockito.when(instance3.getPingStatus()).thenReturn(PingStatus.OK);
     
Mockito.when(instance3.getIsolationStatus()).thenReturn(IsolationStatus.NORMAL);
     StatefulDiscoveryInstance instance4 = 
Mockito.mock(StatefulDiscoveryInstance.class);
     
Mockito.when(instance4.getHistoryStatus()).thenReturn(HistoryStatus.CURRENT);
-    
Mockito.when(instance4.getMicroserviceInstanceStatus()).thenReturn(MicroserviceInstanceStatus.UP);
+    
Mockito.when(instance4.getStatus()).thenReturn(MicroserviceInstanceStatus.UP);
     Mockito.when(instance4.getPingStatus()).thenReturn(PingStatus.FAIL);
     
Mockito.when(instance4.getIsolationStatus()).thenReturn(IsolationStatus.NORMAL);
     instances.addAll(Arrays.asList(instance1, instance2, instance3, 
instance4));
diff --git a/foundations/foundation-registry/src/test/resources/log4j2.xml 
b/foundations/foundation-registry/src/test/resources/log4j2.xml
index 8cee07220..3125ebd11 100644
--- a/foundations/foundation-registry/src/test/resources/log4j2.xml
+++ b/foundations/foundation-registry/src/test/resources/log4j2.xml
@@ -16,14 +16,14 @@
     under the License.
 -->
 <Configuration status="INFO">
-    <Appenders>
-        <Console name="Console" target="SYSTEM_OUT">
-            <PatternLayout pattern="[%d][%t][%p][%c:%L] %m%n" />
-        </Console>
-    </Appenders>
-    <Loggers>
-        <Root level="INFO">
-            <AppenderRef ref="Console" />
-        </Root>
-    </Loggers>
+  <Appenders>
+    <Console name="Console" target="SYSTEM_OUT">
+      <PatternLayout pattern="[%d][%t][%p][%c:%L] %m%n"/>
+    </Console>
+  </Appenders>
+  <Loggers>
+    <Root level="INFO">
+      <AppenderRef ref="Console"/>
+    </Root>
+  </Loggers>
 </Configuration>
diff --git a/service-registry/registry-consul/pom.xml 
b/service-registry/registry-consul/pom.xml
index fe1806e62..58399a146 100644
--- a/service-registry/registry-consul/pom.xml
+++ b/service-registry/registry-consul/pom.xml
@@ -17,8 +17,8 @@
   -->
 
 <project xmlns="http://maven.apache.org/POM/4.0.0";
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
   <modelVersion>4.0.0</modelVersion>
   <parent>
     <groupId>org.apache.servicecomb</groupId>
diff --git 
a/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulConfiguration.java
 
b/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulConfiguration.java
index e088bcfd5..36422f0f1 100644
--- 
a/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulConfiguration.java
+++ 
b/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulConfiguration.java
@@ -18,6 +18,7 @@
 package org.apache.servicecomb.registry.consul;
 
 import com.google.common.net.HostAndPort;
+
 import org.apache.commons.lang3.StringUtils;
 import org.apache.servicecomb.config.DataCenterProperties;
 import org.apache.servicecomb.registry.RegistrationId;
@@ -54,7 +55,8 @@ public class ConsulConfiguration {
   @ConditionalOnBean(value = {ConsulProperties.class, 
ConsulDiscoveryProperties.class})
   @ConditionalOnMissingBean
   public Consul consulClient(ConsulProperties consulProperties, 
ConsulDiscoveryProperties consulDiscoveryProperties) {
-    Consul.Builder builder = 
Consul.builder().withHostAndPort(HostAndPort.fromParts(consulProperties.getHost(),
 consulProperties.getPort()));
+    Consul.Builder builder = Consul.builder()
+        .withHostAndPort(HostAndPort.fromParts(consulProperties.getHost(), 
consulProperties.getPort()));
     if (StringUtils.isNotBlank(consulDiscoveryProperties.getAclToken())) {
       builder.withAclToken(consulDiscoveryProperties.getAclToken());
     }
diff --git 
a/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulDiscovery.java
 
b/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulDiscovery.java
index c8229ad9c..ce16ccc47 100644
--- 
a/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulDiscovery.java
+++ 
b/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulDiscovery.java
@@ -20,8 +20,10 @@ package org.apache.servicecomb.registry.consul;
 import com.google.common.collect.Lists;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
+
 import jakarta.annotation.Resource;
 import jakarta.validation.constraints.NotNull;
+
 import org.apache.servicecomb.config.BootStrapProperties;
 import org.apache.servicecomb.registry.api.Discovery;
 import org.apache.servicecomb.registry.consul.config.ConsulDiscoveryProperties;
@@ -111,7 +113,8 @@ public class ConsulDiscovery implements 
Discovery<ConsulDiscoveryInstance> {
     LOGGER.info("ConsulDiscovery run");
     String serviceName = BootStrapProperties.readServiceName(environment);
     HealthClient healthClient = consulClient.healthClient();
-    svHealth = ServiceHealthCache.newCache(healthClient, serviceName, true, 
Options.BLANK_QUERY_OPTIONS, consulDiscoveryProperties.getWatchSeconds());
+    svHealth = ServiceHealthCache.newCache(healthClient, serviceName, true, 
Options.BLANK_QUERY_OPTIONS,
+        consulDiscoveryProperties.getWatchSeconds());
     svHealth.addListener((Map<ServiceHealthKey, ServiceHealth> newValues) -> 
instanceChangedListener.onInstanceChanged(
         name(), BootStrapProperties.readApplication(environment), serviceName, 
getInstances(serviceName)));
     svHealth.start();
diff --git 
a/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulDiscoveryInstance.java
 
b/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulDiscoveryInstance.java
index 272219285..de3bf9bc2 100644
--- 
a/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulDiscoveryInstance.java
+++ 
b/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulDiscoveryInstance.java
@@ -22,17 +22,17 @@ import 
org.apache.servicecomb.registry.api.MicroserviceInstanceStatus;
 
 public class ConsulDiscoveryInstance extends ConsulInstance implements 
DiscoveryInstance {
 
-    public ConsulDiscoveryInstance(ConsulInstance consulInstance) {
-        super(consulInstance);
-    }
+  public ConsulDiscoveryInstance(ConsulInstance consulInstance) {
+    super(consulInstance);
+  }
 
-    @Override
-    public MicroserviceInstanceStatus getStatus() {
-        return MicroserviceInstanceStatus.UP;
-    }
+  @Override
+  public MicroserviceInstanceStatus getStatus() {
+    return MicroserviceInstanceStatus.UP;
+  }
 
-    @Override
-    public String getRegistryName() {
-        return ConsulConst.CONSUL_REGISTRY_NAME;
-    }
+  @Override
+  public String getRegistryName() {
+    return ConsulConst.CONSUL_REGISTRY_NAME;
+  }
 }
diff --git 
a/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulInstance.java
 
b/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulInstance.java
index 03ef5710b..b29f80e77 100644
--- 
a/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulInstance.java
+++ 
b/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulInstance.java
@@ -19,6 +19,7 @@ package org.apache.servicecomb.registry.consul;
 
 import org.apache.servicecomb.registry.api.DataCenterInfo;
 import org.apache.servicecomb.registry.api.MicroserviceInstance;
+import org.apache.servicecomb.registry.api.MicroserviceInstanceStatus;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -144,7 +145,7 @@ public class ConsulInstance implements MicroserviceInstance 
{
 
   @Override
   public DataCenterInfo getDataCenterInfo() {
-    return dataCenterInfo;
+    return dataCenterInfo == null ? new DataCenterInfo() : dataCenterInfo;
   }
 
   @Override
@@ -188,4 +189,9 @@ public class ConsulInstance implements MicroserviceInstance 
{
   public String getServiceId() {
     return serviceId;
   }
+
+  @Override
+  public MicroserviceInstanceStatus getStatus() {
+    return MicroserviceInstanceStatus.UP;
+  }
 }
diff --git 
a/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulRegistration.java
 
b/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulRegistration.java
index 0399face8..122ee5ade 100644
--- 
a/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulRegistration.java
+++ 
b/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulRegistration.java
@@ -19,7 +19,9 @@ package org.apache.servicecomb.registry.consul;
 
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
+
 import jakarta.annotation.Resource;
+
 import org.apache.commons.lang3.StringUtils;
 import org.apache.servicecomb.config.BootStrapProperties;
 import org.apache.servicecomb.config.DataCenterProperties;
diff --git 
a/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulRegistrationInstance.java
 
b/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulRegistrationInstance.java
index d06ca7e6a..dc0b83eae 100644
--- 
a/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulRegistrationInstance.java
+++ 
b/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/ConsulRegistrationInstance.java
@@ -17,7 +17,7 @@
 
 package org.apache.servicecomb.registry.consul;
 
-import org.apache.servicecomb.registry.api.MicroserviceInstanceStatus;
+
 import org.apache.servicecomb.registry.api.RegistrationInstance;
 
 public class ConsulRegistrationInstance extends ConsulInstance implements 
RegistrationInstance {
@@ -25,14 +25,4 @@ public class ConsulRegistrationInstance extends 
ConsulInstance implements Regist
   public ConsulRegistrationInstance(ConsulInstance instance) {
     super(instance);
   }
-
-  @Override
-  public MicroserviceInstanceStatus getInitialStatus() {
-    return MicroserviceInstanceStatus.STARTING;
-  }
-
-  @Override
-  public MicroserviceInstanceStatus getReadyStatus() {
-    return MicroserviceInstanceStatus.UP;
-  }
 }
diff --git 
a/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/config/ConsulProperties.java
 
b/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/config/ConsulProperties.java
index c594a76fc..bb04a7583 100644
--- 
a/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/config/ConsulProperties.java
+++ 
b/service-registry/registry-consul/src/main/java/org/apache/servicecomb/registry/consul/config/ConsulProperties.java
@@ -18,6 +18,7 @@
 package org.apache.servicecomb.registry.consul.config;
 
 import jakarta.validation.constraints.NotNull;
+
 import org.springframework.validation.annotation.Validated;
 
 
diff --git 
a/service-registry/registry-etcd/src/main/java/org/apache/servicecomb/registry/etcd/EtcdInstance.java
 
b/service-registry/registry-etcd/src/main/java/org/apache/servicecomb/registry/etcd/EtcdInstance.java
index 19fbd8cad..99ab793ff 100644
--- 
a/service-registry/registry-etcd/src/main/java/org/apache/servicecomb/registry/etcd/EtcdInstance.java
+++ 
b/service-registry/registry-etcd/src/main/java/org/apache/servicecomb/registry/etcd/EtcdInstance.java
@@ -23,6 +23,7 @@ import java.util.Map;
 
 import org.apache.servicecomb.registry.api.DataCenterInfo;
 import org.apache.servicecomb.registry.api.MicroserviceInstance;
+import org.apache.servicecomb.registry.api.MicroserviceInstanceStatus;
 
 public class EtcdInstance implements MicroserviceInstance {
   private String serviceId;
@@ -143,7 +144,7 @@ public class EtcdInstance implements MicroserviceInstance {
 
   @Override
   public DataCenterInfo getDataCenterInfo() {
-    return dataCenterInfo;
+    return dataCenterInfo == null ? new DataCenterInfo() : dataCenterInfo;
   }
 
   @Override
@@ -188,6 +189,11 @@ public class EtcdInstance implements MicroserviceInstance {
     return serviceId;
   }
 
+  @Override
+  public MicroserviceInstanceStatus getStatus() {
+    return MicroserviceInstanceStatus.UP;
+  }
+
   @Override
   public String toString() {
     return "EtcdInstance{" +
diff --git 
a/service-registry/registry-etcd/src/main/java/org/apache/servicecomb/registry/etcd/EtcdRegistrationInstance.java
 
b/service-registry/registry-etcd/src/main/java/org/apache/servicecomb/registry/etcd/EtcdRegistrationInstance.java
index 444fe8670..3dfa78c33 100644
--- 
a/service-registry/registry-etcd/src/main/java/org/apache/servicecomb/registry/etcd/EtcdRegistrationInstance.java
+++ 
b/service-registry/registry-etcd/src/main/java/org/apache/servicecomb/registry/etcd/EtcdRegistrationInstance.java
@@ -16,21 +16,10 @@
  */
 package org.apache.servicecomb.registry.etcd;
 
-import org.apache.servicecomb.registry.api.MicroserviceInstanceStatus;
 import org.apache.servicecomb.registry.api.RegistrationInstance;
 
 public class EtcdRegistrationInstance extends EtcdInstance implements 
RegistrationInstance {
   public EtcdRegistrationInstance(EtcdInstance instance) {
     super(instance);
   }
-
-  @Override
-  public MicroserviceInstanceStatus getInitialStatus() {
-    return MicroserviceInstanceStatus.STARTING;
-  }
-
-  @Override
-  public MicroserviceInstanceStatus getReadyStatus() {
-    return MicroserviceInstanceStatus.UP;
-  }
 }
diff --git 
a/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/LocalRegistrationInstance.java
 
b/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/LocalRegistrationInstance.java
index 2262beab4..e07527636 100644
--- 
a/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/LocalRegistrationInstance.java
+++ 
b/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/LocalRegistrationInstance.java
@@ -119,12 +119,7 @@ public class LocalRegistrationInstance implements 
RegistrationInstance {
   }
 
   @Override
-  public MicroserviceInstanceStatus getInitialStatus() {
-    return MicroserviceInstanceStatus.STARTING;
-  }
-
-  @Override
-  public MicroserviceInstanceStatus getReadyStatus() {
+  public MicroserviceInstanceStatus getStatus() {
     return MicroserviceInstanceStatus.UP;
   }
 
diff --git a/service-registry/registry-nacos/pom.xml 
b/service-registry/registry-nacos/pom.xml
index eb1a4b5d9..97b866735 100644
--- a/service-registry/registry-nacos/pom.xml
+++ b/service-registry/registry-nacos/pom.xml
@@ -17,35 +17,35 @@
   -->
 
 <project xmlns="http://maven.apache.org/POM/4.0.0";
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
-    <parent>
-        <groupId>org.apache.servicecomb</groupId>
-        <artifactId>service-registry-parent</artifactId>
-        <version>3.3.0-SNAPSHOT</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+  <parent>
+    <groupId>org.apache.servicecomb</groupId>
+    <artifactId>service-registry-parent</artifactId>
+    <version>3.3.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>registry-nacos</artifactId>
-    <name>Java Chassis::Service Registry::Nacos</name>
+  <artifactId>registry-nacos</artifactId>
+  <name>Java Chassis::Service Registry::Nacos</name>
 
-    <dependencies>
-        <dependency>
-            <groupId>com.alibaba.nacos</groupId>
-            <artifactId>nacos-client</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicecomb</groupId>
-            <artifactId>foundation-common</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicecomb</groupId>
-            <artifactId>foundation-registry</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicecomb</groupId>
-            <artifactId>java-chassis-core</artifactId>
-        </dependency>
-    </dependencies>
+  <dependencies>
+    <dependency>
+      <groupId>com.alibaba.nacos</groupId>
+      <artifactId>nacos-client</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>foundation-common</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>foundation-registry</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>java-chassis-core</artifactId>
+    </dependency>
+  </dependencies>
 
 </project>
diff --git 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosConst.java
 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosConst.java
index b3a7a5dab..563d17260 100644
--- 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosConst.java
+++ 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosConst.java
@@ -57,4 +57,6 @@ public class NacosConst {
   public static final String NAMING_LOAD_CACHE_AT_START = 
"namingLoadCacheAtStart";
 
   public static final String NACOS_REGISTRY_NAME = "nacos-registry";
+
+  public static final String NACOS_STATUS = "nacos-status";
 }
diff --git 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosDiscovery.java
 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosDiscovery.java
index bd41ad539..dfe2a5739 100644
--- 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosDiscovery.java
+++ 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosDiscovery.java
@@ -25,6 +25,7 @@ import java.util.Map;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import com.alibaba.nacos.api.exception.NacosException;
+
 import org.apache.servicecomb.registry.api.Discovery;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
diff --git 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosDiscoveryInstance.java
 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosDiscoveryInstance.java
index 93c8369a6..6360d0120 100644
--- 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosDiscoveryInstance.java
+++ 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosDiscoveryInstance.java
@@ -57,7 +57,15 @@ public class NacosDiscoveryInstance extends 
AbstractDiscoveryInstance {
 
   @Override
   public MicroserviceInstanceStatus getStatus() {
-    return instance.isEnabled() ? MicroserviceInstanceStatus.UP : 
MicroserviceInstanceStatus.DOWN;
+    if (instance.isEnabled()) {
+      String instanceStatus = 
instance.getMetadata().get(NacosConst.NACOS_STATUS);
+      if (StringUtils.isBlank(instanceStatus)) {
+        return MicroserviceInstanceStatus.UP;
+      }
+      return MicroserviceInstanceStatus.valueOf(instanceStatus);
+    } else {
+      return MicroserviceInstanceStatus.DOWN;
+    }
   }
 
   @Override
diff --git 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosRegistration.java
 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosRegistration.java
index c11afaec7..96f41d067 100644
--- 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosRegistration.java
+++ 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosRegistration.java
@@ -20,6 +20,7 @@ package org.apache.servicecomb.registry.nacos;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.servicecomb.config.BootStrapProperties;
 import org.apache.servicecomb.config.DataCenterProperties;
 import org.apache.servicecomb.core.Endpoint;
 import org.apache.servicecomb.core.invocation.endpoint.EndpointUtils;
@@ -65,7 +66,8 @@ public class NacosRegistration implements 
Registration<NacosRegistrationInstance
         environment);
     instance.setInstanceId(instanceId);
     nacosRegistrationInstance = new NacosRegistrationInstance(instance, 
environment);
-
+    instance.getMetadata()
+        .put(NacosConst.NACOS_STATUS, 
BootStrapProperties.readServiceInstanceInitialStatus(environment));
     namingService = NamingServiceManager.buildNamingService(environment, 
nacosDiscoveryProperties);
   }
 
@@ -132,9 +134,14 @@ public class NacosRegistration implements 
Registration<NacosRegistrationInstance
 
   @Override
   public boolean updateMicroserviceInstanceStatus(MicroserviceInstanceStatus 
status) {
-    // Do not support Nacos update status now. Because update status will fail
-    // due to some unknown reasons(Maybe different constrains in register and 
maintain api).
-    return true;
+    try {
+      instance.getMetadata().put(NacosConst.NACOS_STATUS, status.name());
+      
namingService.registerInstance(nacosRegistrationInstance.getServiceName(),
+          nacosRegistrationInstance.getApplication(), instance);
+      return true;
+    } catch (Exception e) {
+      throw new RuntimeException(e);
+    }
   }
 
   @Override
diff --git 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosRegistrationInstance.java
 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosRegistrationInstance.java
index 653ce3d89..7a99f1b2d 100644
--- 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosRegistrationInstance.java
+++ 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosRegistrationInstance.java
@@ -104,13 +104,8 @@ public class NacosRegistrationInstance implements 
RegistrationInstance {
   }
 
   @Override
-  public MicroserviceInstanceStatus getInitialStatus() {
-    return MicroserviceInstanceStatus.STARTING;
-  }
-
-  @Override
-  public MicroserviceInstanceStatus getReadyStatus() {
-    return MicroserviceInstanceStatus.UP;
+  public MicroserviceInstanceStatus getStatus() {
+    return 
MicroserviceInstanceStatus.valueOf(instance.getMetadata().get(NacosConst.NACOS_STATUS));
   }
 
   public void addSchema(String schemaId, String content) {
diff --git 
a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/registry/sc/MicroserviceHandler.java
 
b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/registry/sc/MicroserviceHandler.java
index 7ff1ec74d..7ffa409a0 100644
--- 
a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/registry/sc/MicroserviceHandler.java
+++ 
b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/registry/sc/MicroserviceHandler.java
@@ -142,7 +142,8 @@ public class MicroserviceHandler {
     properties.putAll(BootStrapProperties.readServiceProperties(environment));
     properties.putAll(genCasProperties(environment));
     microserviceInstance.setProperties(properties);
-    
microserviceInstance.setStatus(MicroserviceInstanceStatus.valueOf(scConfigurationProperties.getInitialStatus()));
+    microserviceInstance.setStatus(
+        
MicroserviceInstanceStatus.valueOf(BootStrapProperties.readServiceInstanceInitialStatus(environment)));
     return microserviceInstance;
   }
 
diff --git 
a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/registry/sc/SCConfigurationProperties.java
 
b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/registry/sc/SCConfigurationProperties.java
index 784f711cf..5ac431406 100644
--- 
a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/registry/sc/SCConfigurationProperties.java
+++ 
b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/registry/sc/SCConfigurationProperties.java
@@ -49,8 +49,6 @@ public class SCConfigurationProperties {
 
   private boolean autoDiscovery = false;
 
-  private String initialStatus = "STARTING";
-
   private boolean watch = false;
 
   private long registrationWaitTimeInMillis = 30000;
@@ -140,14 +138,6 @@ public class SCConfigurationProperties {
     this.healthCheckTimes = healthCheckTimes;
   }
 
-  public String getInitialStatus() {
-    return initialStatus;
-  }
-
-  public void setInitialStatus(String initialStatus) {
-    this.initialStatus = initialStatus;
-  }
-
   public boolean isWatch() {
     return watch;
   }
diff --git 
a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/registry/sc/SCDiscoveryInstance.java
 
b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/registry/sc/SCDiscoveryInstance.java
index 28ef4e37b..f3b7ffe44 100644
--- 
a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/registry/sc/SCDiscoveryInstance.java
+++ 
b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/registry/sc/SCDiscoveryInstance.java
@@ -76,9 +76,12 @@ public class SCDiscoveryInstance extends 
AbstractDiscoveryInstance {
 
   @Override
   public DataCenterInfo getDataCenterInfo() {
-    return new 
DataCenterInfo(microserviceInstance.getDataCenterInfo().getName(),
-        microserviceInstance.getDataCenterInfo().getRegion(),
-        microserviceInstance.getDataCenterInfo().getAvailableZone());
+    if (microserviceInstance.getDataCenterInfo() != null) {
+      return new 
DataCenterInfo(microserviceInstance.getDataCenterInfo().getName(),
+          microserviceInstance.getDataCenterInfo().getRegion(),
+          microserviceInstance.getDataCenterInfo().getAvailableZone());
+    }
+    return new DataCenterInfo();
   }
 
   @Override
diff --git 
a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/registry/sc/SCRegistration.java
 
b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/registry/sc/SCRegistration.java
index e37f54b67..a2a47ca5a 100644
--- 
a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/registry/sc/SCRegistration.java
+++ 
b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/registry/sc/SCRegistration.java
@@ -88,7 +88,6 @@ public class SCRegistration implements 
Registration<SCRegistrationInstance> {
     this.environment = environment;
   }
 
-
   @Override
   public void init() {
     microservice = MicroserviceHandler.createMicroservice(
diff --git 
a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/registry/sc/SCRegistrationInstance.java
 
b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/registry/sc/SCRegistrationInstance.java
index 36416972a..cfe53692e 100644
--- 
a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/registry/sc/SCRegistrationInstance.java
+++ 
b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/registry/sc/SCRegistrationInstance.java
@@ -34,8 +34,7 @@ public class SCRegistrationInstance implements 
RegistrationInstance {
 
   private final ServiceCenterRegistration serviceCenterRegistration;
 
-  public SCRegistrationInstance(Microservice microservice,
-      MicroserviceInstance microserviceInstance,
+  public SCRegistrationInstance(Microservice microservice, 
MicroserviceInstance microserviceInstance,
       ServiceCenterRegistration serviceCenterRegistration) {
     this.microservice = microservice;
     this.microserviceInstance = microserviceInstance;
@@ -107,15 +106,10 @@ public class SCRegistrationInstance implements 
RegistrationInstance {
   }
 
   @Override
-  public MicroserviceInstanceStatus getInitialStatus() {
+  public MicroserviceInstanceStatus getStatus() {
     return 
MicroserviceInstanceStatus.valueOf(microserviceInstance.getStatus().name());
   }
 
-  @Override
-  public MicroserviceInstanceStatus getReadyStatus() {
-    return MicroserviceInstanceStatus.UP;
-  }
-
   public Microservice getBackendMicroservice() {
     return microservice;
   }
diff --git 
a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigRegistrationInstance.java
 
b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigRegistrationInstance.java
index 61864c964..9e1955b24 100644
--- 
a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigRegistrationInstance.java
+++ 
b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigRegistrationInstance.java
@@ -87,12 +87,7 @@ public class ZeroConfigRegistrationInstance implements 
RegistrationInstance {
   }
 
   @Override
-  public MicroserviceInstanceStatus getInitialStatus() {
-    return MicroserviceInstanceStatus.STARTING;
-  }
-
-  @Override
-  public MicroserviceInstanceStatus getReadyStatus() {
+  public MicroserviceInstanceStatus getStatus() {
     return MicroserviceInstanceStatus.UP;
   }
 
diff --git 
a/service-registry/registry-zookeeper/src/main/java/org/apache/servicecomb/registry/zookeeper/ZookeeperDiscoveryInstance.java
 
b/service-registry/registry-zookeeper/src/main/java/org/apache/servicecomb/registry/zookeeper/ZookeeperDiscoveryInstance.java
index f33b05fb7..b01ad5083 100644
--- 
a/service-registry/registry-zookeeper/src/main/java/org/apache/servicecomb/registry/zookeeper/ZookeeperDiscoveryInstance.java
+++ 
b/service-registry/registry-zookeeper/src/main/java/org/apache/servicecomb/registry/zookeeper/ZookeeperDiscoveryInstance.java
@@ -17,18 +17,12 @@
 package org.apache.servicecomb.registry.zookeeper;
 
 import org.apache.servicecomb.registry.api.DiscoveryInstance;
-import org.apache.servicecomb.registry.api.MicroserviceInstanceStatus;
 
 public class ZookeeperDiscoveryInstance extends ZookeeperInstance implements 
DiscoveryInstance {
   public ZookeeperDiscoveryInstance(ZookeeperInstance other) {
     super(other);
   }
 
-  @Override
-  public MicroserviceInstanceStatus getStatus() {
-    return MicroserviceInstanceStatus.UP;
-  }
-
   @Override
   public String getRegistryName() {
     return ZookeeperConst.ZOOKEEPER_REGISTRY_NAME;
diff --git 
a/service-registry/registry-zookeeper/src/main/java/org/apache/servicecomb/registry/zookeeper/ZookeeperInstance.java
 
b/service-registry/registry-zookeeper/src/main/java/org/apache/servicecomb/registry/zookeeper/ZookeeperInstance.java
index 725816b24..b919d9785 100644
--- 
a/service-registry/registry-zookeeper/src/main/java/org/apache/servicecomb/registry/zookeeper/ZookeeperInstance.java
+++ 
b/service-registry/registry-zookeeper/src/main/java/org/apache/servicecomb/registry/zookeeper/ZookeeperInstance.java
@@ -23,6 +23,7 @@ import java.util.Map;
 
 import org.apache.servicecomb.registry.api.DataCenterInfo;
 import org.apache.servicecomb.registry.api.MicroserviceInstance;
+import org.apache.servicecomb.registry.api.MicroserviceInstanceStatus;
 
 public class ZookeeperInstance implements MicroserviceInstance {
   private String serviceId;
@@ -49,6 +50,8 @@ public class ZookeeperInstance implements 
MicroserviceInstance {
 
   private Map<String, String> properties = new HashMap<>();
 
+  private MicroserviceInstanceStatus status;
+
   public ZookeeperInstance() {
 
   }
@@ -66,6 +69,7 @@ public class ZookeeperInstance implements 
MicroserviceInstance {
     this.endpoints = other.endpoints;
     this.schemas = other.schemas;
     this.properties = other.properties;
+    this.status = other.status;
   }
 
   public void setServiceId(String serviceId) {
@@ -116,6 +120,10 @@ public class ZookeeperInstance implements 
MicroserviceInstance {
     this.properties = properties;
   }
 
+  public void setStatus(MicroserviceInstanceStatus status) {
+    this.status = status;
+  }
+
   @Override
   public String getEnvironment() {
     return this.environment;
@@ -143,7 +151,7 @@ public class ZookeeperInstance implements 
MicroserviceInstance {
 
   @Override
   public DataCenterInfo getDataCenterInfo() {
-    return dataCenterInfo;
+    return dataCenterInfo == null ? new DataCenterInfo() : dataCenterInfo;
   }
 
   @Override
@@ -187,4 +195,9 @@ public class ZookeeperInstance implements 
MicroserviceInstance {
   public String getServiceId() {
     return serviceId;
   }
+
+  @Override
+  public MicroserviceInstanceStatus getStatus() {
+    return this.status;
+  }
 }
diff --git 
a/service-registry/registry-zookeeper/src/main/java/org/apache/servicecomb/registry/zookeeper/ZookeeperRegistration.java
 
b/service-registry/registry-zookeeper/src/main/java/org/apache/servicecomb/registry/zookeeper/ZookeeperRegistration.java
index c799cc047..55df0d427 100644
--- 
a/service-registry/registry-zookeeper/src/main/java/org/apache/servicecomb/registry/zookeeper/ZookeeperRegistration.java
+++ 
b/service-registry/registry-zookeeper/src/main/java/org/apache/servicecomb/registry/zookeeper/ZookeeperRegistration.java
@@ -79,6 +79,8 @@ public class ZookeeperRegistration implements 
Registration<ZookeeperRegistration
 
   private RegistrationId registrationId;
 
+  private ServiceDiscovery<ZookeeperInstance> dis;
+
   @Autowired
   @SuppressWarnings("unused")
   public void setEnvironment(Environment environment) {
@@ -125,6 +127,9 @@ public class ZookeeperRegistration implements 
Registration<ZookeeperRegistration
     }
     
zookeeperInstance.setProperties(BootStrapProperties.readServiceProperties(environment));
     
zookeeperInstance.setVersion(BootStrapProperties.readServiceVersion(environment));
+
+    zookeeperInstance.setStatus(
+        
MicroserviceInstanceStatus.valueOf(BootStrapProperties.readServiceInstanceInitialStatus(environment)));
     try {
       this.instance = 
ServiceInstance.<ZookeeperInstance>builder().name(zookeeperInstance.getServiceName())
           
.id(zookeeperInstance.getInstanceId()).payload(zookeeperInstance).build();
@@ -155,7 +160,7 @@ public class ZookeeperRegistration implements 
Registration<ZookeeperRegistration
     client.start();
     JsonInstanceSerializer<ZookeeperInstance> serializer =
         new JsonInstanceSerializer<>(ZookeeperInstance.class);
-    ServiceDiscovery<ZookeeperInstance> dis = 
ServiceDiscoveryBuilder.builder(ZookeeperInstance.class)
+    dis = ServiceDiscoveryBuilder.builder(ZookeeperInstance.class)
         .client(client)
         .basePath(basePath + "/" + 
BootStrapProperties.readApplication(environment))
         .serializer(serializer)
@@ -187,7 +192,12 @@ public class ZookeeperRegistration implements 
Registration<ZookeeperRegistration
 
   @Override
   public boolean updateMicroserviceInstanceStatus(MicroserviceInstanceStatus 
status) {
-    // not support yet
+    this.instance.getPayload().setStatus(status);
+    try {
+      dis.updateService(instance);
+    } catch (Exception e) {
+      throw new IllegalStateException(e);
+    }
     return true;
   }
 
diff --git 
a/service-registry/registry-zookeeper/src/main/java/org/apache/servicecomb/registry/zookeeper/ZookeeperRegistrationInstance.java
 
b/service-registry/registry-zookeeper/src/main/java/org/apache/servicecomb/registry/zookeeper/ZookeeperRegistrationInstance.java
index 6c098705b..e5caed189 100644
--- 
a/service-registry/registry-zookeeper/src/main/java/org/apache/servicecomb/registry/zookeeper/ZookeeperRegistrationInstance.java
+++ 
b/service-registry/registry-zookeeper/src/main/java/org/apache/servicecomb/registry/zookeeper/ZookeeperRegistrationInstance.java
@@ -16,21 +16,10 @@
  */
 package org.apache.servicecomb.registry.zookeeper;
 
-import org.apache.servicecomb.registry.api.MicroserviceInstanceStatus;
 import org.apache.servicecomb.registry.api.RegistrationInstance;
 
 public class ZookeeperRegistrationInstance extends ZookeeperInstance 
implements RegistrationInstance {
   public ZookeeperRegistrationInstance(ZookeeperInstance instance) {
     super(instance);
   }
-
-  @Override
-  public MicroserviceInstanceStatus getInitialStatus() {
-    return MicroserviceInstanceStatus.STARTING;
-  }
-
-  @Override
-  public MicroserviceInstanceStatus getReadyStatus() {
-    return MicroserviceInstanceStatus.UP;
-  }
 }


Reply via email to