You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2020/06/04 06:14:36 UTC

[servicecomb-java-chassis] branch master updated: [SCB-1971] minor change to fix an issue & remove unnecessary Optional

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 8d06545  [SCB-1971] minor change to fix an issue & remove unnecessary Optional
8d06545 is described below

commit 8d06545dade69912815f18603e32da9b0f5227ba
Author: Jun Gan <ju...@gmail.com>
AuthorDate: Wed Jun 3 18:09:06 2020 -0400

    [SCB-1971] minor change to fix an issue & remove unnecessary Optional
---
 .../zeroconfig/ZeroConfigRegistration.java         | 71 ++---------------
 .../servicecomb/zeroconfig/client/ClientUtil.java  |  5 +-
 .../zeroconfig/client/ZeroConfigClient.java        | 90 +++++++++++++++-------
 .../client/ZeroConfigRegistryClientImpl.java       | 81 +++++++++----------
 .../servicecomb/zeroconfig/server/ServerUtil.java  |  5 +-
 .../server/ZeroConfigRegistryService.java          | 17 ++--
 .../zeroconfig/client/TestZeroConfigClient.java    | 24 +++---
 .../client/TestZeroConfigRegistryClientImpl.java   |  9 +--
 .../server/TestZeroConfigRegistryService.java      | 17 ++--
 9 files changed, 142 insertions(+), 177 deletions(-)

diff --git a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigRegistration.java b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigRegistration.java
index 745f43f..1de0b82 100644
--- a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigRegistration.java
+++ b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigRegistration.java
@@ -16,19 +16,13 @@
  */
 package org.apache.servicecomb.zeroconfig;
 
-import com.google.common.annotations.VisibleForTesting;
 import com.netflix.config.DynamicPropertyFactory;
 import java.util.Collection;
-import org.apache.commons.lang.StringUtils;
-import org.apache.servicecomb.config.ConfigUtil;
-import org.apache.servicecomb.config.archaius.sources.MicroserviceConfigLoader;
 import org.apache.servicecomb.registry.api.Registration;
 import org.apache.servicecomb.registry.api.registry.BasePath;
 import org.apache.servicecomb.registry.api.registry.Microservice;
-import org.apache.servicecomb.registry.api.registry.MicroserviceFactory;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstanceStatus;
-import org.apache.servicecomb.registry.definition.MicroserviceDefinition;
 import org.apache.servicecomb.zeroconfig.client.ClientUtil;
 import org.apache.servicecomb.zeroconfig.client.ZeroConfigClient;
 import org.apache.servicecomb.zeroconfig.server.ServerUtil;
@@ -47,10 +41,6 @@ public class ZeroConfigRegistration implements Registration {
 
   private ZeroConfigClient zeroConfigClient = ZeroConfigClient.INSTANCE;
 
-  // registration objects
-  private Microservice selfMicroservice;
-  private MicroserviceInstance selfMicroserviceInstance;
-
   @Override
   public boolean enabled() {
     return DynamicPropertyFactory.getInstance().getBooleanProperty(ENABLED, true).get();
@@ -58,35 +48,11 @@ public class ZeroConfigRegistration implements Registration {
 
   @Override
   public void init() {
-    // init self Microservice & MicroserviceInstance objects
-    MicroserviceConfigLoader loader = ConfigUtil.getMicroserviceConfigLoader();
-    MicroserviceDefinition microserviceDefinition = new MicroserviceDefinition(
-        loader.getConfigModels());
-    MicroserviceFactory microserviceFactory = new MicroserviceFactory();
-    this.selfMicroservice = microserviceFactory.create(microserviceDefinition);
-    this.selfMicroserviceInstance = selfMicroservice.getInstance();
-
-    setServiceIdAndInstanceId();
-
+    zeroConfigClient.init();
     ServerUtil.init();
     ClientUtil.init();
   }
 
-  private void  setServiceIdAndInstanceId(){
-    // set serviceId
-    if (StringUtils.isEmpty(selfMicroservice.getServiceId())) {
-      String serviceId = ClientUtil.generateServiceId(selfMicroservice);
-      selfMicroservice.setServiceId(serviceId);
-      selfMicroserviceInstance.setServiceId(serviceId);
-    }
-
-    // set instanceId
-    if (StringUtils.isEmpty(selfMicroserviceInstance.getInstanceId())) {
-      String instanceId = ClientUtil.generateServiceInstanceId();
-      selfMicroserviceInstance.setInstanceId(instanceId);
-    }
-  }
-
   @Override
   public void run() {
     // register service instance
@@ -119,59 +85,38 @@ public class ZeroConfigRegistration implements Registration {
 
   @Override
   public MicroserviceInstance getMicroserviceInstance() {
-    return this.selfMicroserviceInstance;
+    return zeroConfigClient.getSelfMicroserviceInstance();
   }
 
   @Override
   public Microservice getMicroservice() {
-    return this.selfMicroservice;
+    return zeroConfigClient.getSelfMicroservice();
   }
 
   @Override
   public String getAppId() {
-    return this.selfMicroservice.getAppId();
+    return zeroConfigClient.getSelfMicroservice().getAppId();
   }
 
   @Override
   public boolean updateMicroserviceInstanceStatus(MicroserviceInstanceStatus status) {
-    this.selfMicroserviceInstance.setStatus(status);
+    zeroConfigClient.getSelfMicroserviceInstance().setStatus(status);
     return true;
   }
 
   @Override
   public void addSchema(String schemaId, String content) {
-    this.selfMicroservice.addSchema(schemaId, content);
+    zeroConfigClient.getSelfMicroservice().addSchema(schemaId, content);
   }
 
   @Override
   public void addEndpoint(String endpoint) {
-    this.selfMicroserviceInstance.getEndpoints().add(endpoint);
+    zeroConfigClient.getSelfMicroserviceInstance().getEndpoints().add(endpoint);
   }
 
   @Override
   public void addBasePath(Collection<BasePath> basePaths) {
-    this.selfMicroservice.getPaths().addAll(basePaths);
-  }
-
-  // setter/getter
-  public Microservice getSelfMicroservice() {
-    return this.selfMicroservice;
-  }
-
-  public MicroserviceInstance getSelfMicroserviceInstance() {
-    return this.selfMicroserviceInstance;
-  }
-
-  @VisibleForTesting
-  public void setSelfMicroserviceInstance(
-      MicroserviceInstance selfMicroserviceInstance) {
-    this.selfMicroserviceInstance = selfMicroserviceInstance;
-  }
-
-  @VisibleForTesting
-  public void setSelfMicroservice(
-      Microservice selfMicroservice) {
-    this.selfMicroservice = selfMicroservice;
+    zeroConfigClient.getSelfMicroservice().getPaths().addAll(basePaths);
   }
 
 }
diff --git a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/client/ClientUtil.java b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/client/ClientUtil.java
index 3eb0e78..8cf40b3 100644
--- a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/client/ClientUtil.java
+++ b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/client/ClientUtil.java
@@ -30,7 +30,6 @@ import java.net.MulticastSocket;
 
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Optional;
 import java.util.UUID;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
@@ -99,7 +98,7 @@ public class ClientUtil {
         TimeUnit.SECONDS);
   }
 
-  public static Optional<Map<String, String>> convertToRegisterDataModel(String serviceId,
+  public static Map<String, String> convertToRegisterDataModel(String serviceId,
       String microserviceInstanceId,
       MicroserviceInstance microserviceInstance, Microservice microservice) {
     Map<String, String> serviceInstanceTextAttributesMap = new HashMap<>();
@@ -121,7 +120,7 @@ public class ClientUtil {
     serviceInstanceTextAttributesMap
         .put(SCHEMA_IDS, String.join(LIST_STRING_SPLITER, microservice.getSchemas()));
 
-    return Optional.of(serviceInstanceTextAttributesMap);
+    return serviceInstanceTextAttributesMap;
   }
 
   public static MicroserviceInstance convertToClientMicroserviceInstance(
diff --git a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/client/ZeroConfigClient.java b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/client/ZeroConfigClient.java
index e52172d..c4c10be 100644
--- a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/client/ZeroConfigClient.java
+++ b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/client/ZeroConfigClient.java
@@ -25,17 +25,19 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 import org.apache.commons.lang.StringUtils;
+import org.apache.servicecomb.config.ConfigUtil;
+import org.apache.servicecomb.config.archaius.sources.MicroserviceConfigLoader;
 import org.apache.servicecomb.registry.api.registry.FindInstancesResponse;
 import org.apache.servicecomb.registry.api.registry.Microservice;
+import org.apache.servicecomb.registry.api.registry.MicroserviceFactory;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstances;
+import org.apache.servicecomb.registry.definition.MicroserviceDefinition;
 import org.apache.servicecomb.registry.version.Version;
 import org.apache.servicecomb.registry.version.VersionRule;
 import org.apache.servicecomb.registry.version.VersionRuleUtils;
 import org.apache.servicecomb.registry.version.VersionUtils;
-import org.apache.servicecomb.zeroconfig.ZeroConfigRegistration;
 import org.apache.servicecomb.zeroconfig.server.ServerMicroserviceInstance;
 import org.apache.servicecomb.zeroconfig.server.ServerUtil;
 import org.apache.servicecomb.zeroconfig.server.ZeroConfigRegistryService;
@@ -54,6 +56,10 @@ public class ZeroConfigClient {
   private ZeroConfigRegistryService zeroConfigRegistryService;
   private MulticastSocket multicastSocket;
 
+  // registration objects
+  private Microservice selfMicroservice;
+  private MicroserviceInstance selfMicroserviceInstance;
+
   // Constructor
   private ZeroConfigClient(ZeroConfigRegistryService zeroConfigRegistryService,
       MulticastSocket multicastSocket) {
@@ -70,6 +76,29 @@ public class ZeroConfigClient {
     return this;
   }
 
+  public void init() {
+    MicroserviceConfigLoader loader = ConfigUtil.getMicroserviceConfigLoader();
+    MicroserviceDefinition microserviceDefinition = new MicroserviceDefinition(
+        loader.getConfigModels());
+    MicroserviceFactory microserviceFactory = new MicroserviceFactory();
+    selfMicroservice = microserviceFactory.create(microserviceDefinition);
+    selfMicroserviceInstance = selfMicroservice.getInstance();
+
+    // set serviceId
+    if (StringUtils.isEmpty(selfMicroservice.getServiceId())) {
+      String serviceId = ClientUtil.generateServiceId(selfMicroservice);
+      selfMicroservice.setServiceId(serviceId);
+      selfMicroserviceInstance.setServiceId(serviceId);
+    }
+
+    // set instanceId
+    if (StringUtils.isEmpty(selfMicroserviceInstance.getInstanceId())) {
+      String instanceId = ClientUtil.generateServiceInstanceId();
+      selfMicroserviceInstance.setInstanceId(instanceId);
+    }
+
+  }
+
   // builder method
   private static ZeroConfigClient buildZeroConfigClient() {
     MulticastSocket multicastSocket = null;
@@ -154,7 +183,7 @@ public class ZeroConfigClient {
   }
 
   public Microservice getMicroservice(String microserviceId) {
-    Microservice selfMicroservice = ZeroConfigRegistration.INSTANCE.getSelfMicroservice();
+
     // for registration
     if (selfMicroservice.getServiceId().equals(microserviceId)) {
       return selfMicroservice;
@@ -165,9 +194,7 @@ public class ZeroConfigClient {
     }
   }
 
-
   public String getSchema(String microserviceId, String schemaId) {
-    Microservice selfMicroservice = ZeroConfigRegistration.INSTANCE.getSelfMicroservice();
     LOGGER.info("Retrieve schema content for Microservice ID: {}, Schema ID: {}",
         microserviceId, schemaId);
     // called by service registration task when registering itself
@@ -193,18 +220,16 @@ public class ZeroConfigClient {
   }
 
   public MicroserviceInstance findMicroserviceInstance(String serviceId, String instanceId) {
-    Optional<ServerMicroserviceInstance> optionalInstance = this.zeroConfigRegistryService.
-        findServiceInstance(serviceId, instanceId);
+    ServerMicroserviceInstance instance = this.zeroConfigRegistryService
+        .findServiceInstance(serviceId, instanceId);
 
-    if (optionalInstance.isPresent()) {
-      return ClientUtil
-          .convertToClientMicroserviceInstance(optionalInstance.get());
-    } else {
+    if (instance == null) {
       LOGGER.error(
           "Invalid serviceId OR instanceId! Failed to retrieve Microservice Instance for serviceId {} and instanceId {}",
           serviceId, instanceId);
       return null;
     }
+    return ClientUtil.convertToClientMicroserviceInstance(instance);
   }
 
   public MicroserviceInstances findServiceInstances(String appId, String providerServiceName,
@@ -262,26 +287,35 @@ public class ZeroConfigClient {
 
   private Map<String, String> prepareRegisterData() {
     // Convert to Multicast data format
-    Microservice selfService = ZeroConfigRegistration.INSTANCE.getSelfMicroservice();
-    MicroserviceInstance selfInstance = ZeroConfigRegistration.INSTANCE
-        .getSelfMicroserviceInstance();
+    return ClientUtil.convertToRegisterDataModel(selfMicroservice.getServiceId(),
+        selfMicroserviceInstance.getInstanceId(), selfMicroserviceInstance, selfMicroservice);
+  }
 
-    Optional<Map<String, String>> optionalDataMap = ClientUtil
-        .convertToRegisterDataModel(selfService.getServiceId(), selfInstance.getInstanceId(),
-            selfInstance, selfService);
+  private ServerMicroserviceInstance preUnregisterCheck() {
+    ServerMicroserviceInstance instance = zeroConfigRegistryService
+        .findServiceInstance(selfMicroserviceInstance.getServiceId(),
+            selfMicroserviceInstance.getInstanceId());
+    return instance;
+  }
 
-    return optionalDataMap.orElse(null);
+  public Microservice getSelfMicroservice() {
+    return selfMicroservice;
   }
 
-  private ServerMicroserviceInstance preUnregisterCheck() {
-    MicroserviceInstance instance = ZeroConfigRegistration.INSTANCE.getSelfMicroserviceInstance();
-    String serviceId = instance.getServiceId();
-    String instanceId = instance.getInstanceId();
-    Optional<ServerMicroserviceInstance> optionalInstance = zeroConfigRegistryService
-        .findServiceInstance(serviceId, instanceId);
-    if (optionalInstance.isPresent()) {
-      return optionalInstance.get();
-    }
-    return null;
+  @VisibleForTesting
+  public void setSelfMicroservice(
+      Microservice selfMicroservice) {
+    this.selfMicroservice = selfMicroservice;
   }
+
+  public MicroserviceInstance getSelfMicroserviceInstance() {
+    return selfMicroserviceInstance;
+  }
+
+  @VisibleForTesting
+  public void setSelfMicroserviceInstance(
+      MicroserviceInstance selfMicroserviceInstance) {
+    this.selfMicroserviceInstance = selfMicroserviceInstance;
+  }
+
 }
diff --git a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/client/ZeroConfigRegistryClientImpl.java b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/client/ZeroConfigRegistryClientImpl.java
index a159213..f475dde 100644
--- a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/client/ZeroConfigRegistryClientImpl.java
+++ b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/client/ZeroConfigRegistryClientImpl.java
@@ -51,7 +51,6 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 import java.util.stream.Collectors;
 import org.springframework.web.client.RestTemplate;
 
@@ -245,7 +244,7 @@ public class ZeroConfigRegistryClientImpl implements ServiceRegistryClient {
     try {
       Map<String, String> serviceInstanceMap = ClientUtil
           .convertToRegisterDataModel(serviceId, instanceId, instance,
-              ClientUtil.getMicroserviceSelf()).get();
+              ClientUtil.getMicroserviceSelf());
       byte[] instanceData = serviceInstanceMap.toString().getBytes();
       DatagramPacket instanceDataPacket = new DatagramPacket(instanceData, instanceData.length,
           InetAddress.getByName(GROUP), PORT);
@@ -267,17 +266,18 @@ public class ZeroConfigRegistryClientImpl implements ServiceRegistryClient {
   @Override
   public List<MicroserviceInstance> getMicroserviceInstance(String consumerId, String providerId) {
     List<MicroserviceInstance> microserviceInstanceResultList = new ArrayList<>();
-    Optional<List<ServerMicroserviceInstance>> optionalServerMicroserviceInstanceList = this.zeroConfigRegistryService
-        .
-            getMicroserviceInstance(consumerId, providerId);
-    if (optionalServerMicroserviceInstanceList.isPresent()) {
-      microserviceInstanceResultList = optionalServerMicroserviceInstanceList.get().stream()
-          .map(serverInstance -> {
-            return ClientUtil.convertToClientMicroserviceInstance(serverInstance);
-          }).collect(Collectors.toList());
-    } else {
+    List<ServerMicroserviceInstance> serverMicroserviceInstanceList = this.zeroConfigRegistryService
+        .getMicroserviceInstance(consumerId, providerId);
+    if (serverMicroserviceInstanceList == null || serverMicroserviceInstanceList.isEmpty()) {
       LOGGER.error("Invalid serviceId: {}", providerId);
+      return microserviceInstanceResultList;
     }
+
+    microserviceInstanceResultList = serverMicroserviceInstanceList.stream()
+        .map(serverInstance -> {
+          return ClientUtil.convertToClientMicroserviceInstance(serverInstance);
+        }).collect(Collectors.toList());
+
     return microserviceInstanceResultList;
   }
 
@@ -303,32 +303,32 @@ public class ZeroConfigRegistryClientImpl implements ServiceRegistryClient {
 
   @Override
   public boolean unregisterMicroserviceInstance(String serviceId, String instanceId) {
-    Optional<ServerMicroserviceInstance> optionalServerMicroserviceInstance = this.zeroConfigRegistryService
+    ServerMicroserviceInstance serverMicroserviceInstance = this.zeroConfigRegistryService
         .findServiceInstance(serviceId, instanceId);
 
-    if (optionalServerMicroserviceInstance.isPresent()) {
-      try {
-        LOGGER.info(
-            "Start unregister microservice instance. The instance with servcieId: {} instanceId:{}",
-            serviceId, instanceId);
-        Map<String, String> unregisterEventMap = new HashMap<>();
-        unregisterEventMap.put(EVENT, UNREGISTER_EVENT);
-        unregisterEventMap.put(SERVICE_ID, serviceId);
-        unregisterEventMap.put(INSTANCE_ID, instanceId);
-        byte[] unregisterEventBytes = unregisterEventMap.toString().getBytes();
-        DatagramPacket unregisterEventDataPacket = new DatagramPacket(unregisterEventBytes,
-            unregisterEventBytes.length,
-            InetAddress.getByName(GROUP), PORT);
-        this.multicastSocket.send(unregisterEventDataPacket);
-        return true;
-      } catch (IOException e) {
-        LOGGER
-            .error("Failed to unregister microservice instance event. servcieId: {} instanceId:{}",
-                serviceId, instanceId, e);
-        return false;
-      }
+    if (serverMicroserviceInstance == null) {
+      return false;
+    }
+
+    try {
+      LOGGER.info(
+          "Start unregister microservice instance. The instance with servcieId: {} instanceId:{}",
+          serviceId, instanceId);
+      Map<String, String> unregisterEventMap = new HashMap<>();
+      unregisterEventMap.put(EVENT, UNREGISTER_EVENT);
+      unregisterEventMap.put(SERVICE_ID, serviceId);
+      unregisterEventMap.put(INSTANCE_ID, instanceId);
+      byte[] unregisterEventBytes = unregisterEventMap.toString().getBytes();
+      DatagramPacket unregisterEventDataPacket = new DatagramPacket(unregisterEventBytes,
+          unregisterEventBytes.length,
+          InetAddress.getByName(GROUP), PORT);
+      this.multicastSocket.send(unregisterEventDataPacket);
+      return true;
+    } catch (IOException e) {
+      LOGGER.error("Failed to unregister microservice instance event. servcieId: {} instanceId:{}",
+          serviceId, instanceId, e);
+      return false;
     }
-    return false;
   }
 
   @Override
@@ -352,7 +352,6 @@ public class ZeroConfigRegistryClientImpl implements ServiceRegistryClient {
       AsyncResultCallback<Void> onOpen, AsyncResultCallback<Void> onClose) {
   }
 
-
   @Override
   public List<MicroserviceInstance> findServiceInstance(String selfMicroserviceId, String appId,
       String serviceName, String versionRule) {
@@ -436,19 +435,15 @@ public class ZeroConfigRegistryClientImpl implements ServiceRegistryClient {
 
   @Override
   public MicroserviceInstance findServiceInstance(String serviceId, String instanceId) {
-    Optional<ServerMicroserviceInstance> optionalServerMicroserviceInstance = this.zeroConfigRegistryService
-        .
-            findServiceInstance(serviceId, instanceId);
-
-    if (optionalServerMicroserviceInstance.isPresent()) {
-      return ClientUtil
-          .convertToClientMicroserviceInstance(optionalServerMicroserviceInstance.get());
-    } else {
+    ServerMicroserviceInstance serverMicroserviceInstance = this.zeroConfigRegistryService
+        .findServiceInstance(serviceId, instanceId);
+    if (serverMicroserviceInstance == null) {
       LOGGER.error(
           "Invalid serviceId OR instanceId! Failed to retrieve Microservice Instance for serviceId {} and instanceId {}",
           serviceId, instanceId);
       return null;
     }
+    return ClientUtil.convertToClientMicroserviceInstance(serverMicroserviceInstance);
   }
 
   // for compatibility with existing registration logic. only used in the existing UT code.
diff --git a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/server/ServerUtil.java b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/server/ServerUtil.java
index 824bffa..35a9cb3 100644
--- a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/server/ServerUtil.java
+++ b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/server/ServerUtil.java
@@ -32,7 +32,6 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
@@ -121,9 +120,9 @@ public class ServerUtil {
     }
   }
 
-  public static Optional<ServerMicroserviceInstance> convertToServerMicroserviceInstance(
+  public static ServerMicroserviceInstance convertToServerMicroserviceInstance(
       Map<String, String> serviceInstanceAttributeMap) {
-    return Optional.of(buildServerMicroserviceInstanceFromMap(serviceInstanceAttributeMap));
+    return buildServerMicroserviceInstanceFromMap(serviceInstanceAttributeMap);
   }
 
   private static ServerMicroserviceInstance buildServerMicroserviceInstanceFromMap(
diff --git a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/server/ZeroConfigRegistryService.java b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/server/ZeroConfigRegistryService.java
index 926580b..6145241 100644
--- a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/server/ZeroConfigRegistryService.java
+++ b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/server/ZeroConfigRegistryService.java
@@ -23,7 +23,6 @@ import java.time.Instant;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
 
 import static org.apache.servicecomb.zeroconfig.ZeroConfigRegistryConstants.*;
@@ -44,7 +43,7 @@ public class ZeroConfigRegistryService {
     }
 
     // convert to server side ServerMicroserviceInstance object
-    Optional<ServerMicroserviceInstance> newServerMicroserviceInstance = ServerUtil
+    ServerMicroserviceInstance newServerMicroserviceInstance = ServerUtil
         .convertToServerMicroserviceInstance(serviceAttributeMap);
     Map<String, ServerMicroserviceInstance> innerInstanceMap = ServerUtil.microserviceInstanceMap.
         computeIfAbsent(serviceId, id -> new ConcurrentHashMap<>());
@@ -55,7 +54,7 @@ public class ZeroConfigRegistryService {
       // register a new instance for the service
       LOGGER.info("Register a new instance for  serviceId: {}, instanceId: {}", serviceId,
           instanceId);
-      innerInstanceMap.put(instanceId, newServerMicroserviceInstance.get());
+      innerInstanceMap.put(instanceId, newServerMicroserviceInstance);
     }
   }
 
@@ -84,22 +83,24 @@ public class ZeroConfigRegistryService {
 
   }
 
-  public Optional<ServerMicroserviceInstance> findServiceInstance(String serviceId,
+  public ServerMicroserviceInstance findServiceInstance(String serviceId,
       String instanceId) {
     Map<String, ServerMicroserviceInstance> serverMicroserviceInstanceMap = ServerUtil.microserviceInstanceMap
         .get(serviceId);
-    return serverMicroserviceInstanceMap != null ? Optional
-        .ofNullable(serverMicroserviceInstanceMap.get(instanceId)) : Optional.empty();
+    if (serverMicroserviceInstanceMap == null || serverMicroserviceInstanceMap.isEmpty()) {
+      return null;
+    }
+    return serverMicroserviceInstanceMap.get(instanceId);
   }
 
-  public Optional<List<ServerMicroserviceInstance>> getMicroserviceInstance(String consumerId,
+  public List<ServerMicroserviceInstance> getMicroserviceInstance(String consumerId,
       String providerId) {
     Map<String, ServerMicroserviceInstance> instanceIdMap = ServerUtil.microserviceInstanceMap
         .get(providerId);
     if (instanceIdMap == null || instanceIdMap.isEmpty()) {
       throw new IllegalArgumentException("Invalid serviceId, serviceId=" + providerId);
     }
-    return Optional.ofNullable(new ArrayList<>(instanceIdMap.values()));
+    return new ArrayList<>(instanceIdMap.values());
   }
 
   // for scenario: when other service started before this one start
diff --git a/service-registry/registry-zero-config/src/test/java/org/apache/servicecomb/zeroconfig/client/TestZeroConfigClient.java b/service-registry/registry-zero-config/src/test/java/org/apache/servicecomb/zeroconfig/client/TestZeroConfigClient.java
index 7054f0f..95e2421 100644
--- a/service-registry/registry-zero-config/src/test/java/org/apache/servicecomb/zeroconfig/client/TestZeroConfigClient.java
+++ b/service-registry/registry-zero-config/src/test/java/org/apache/servicecomb/zeroconfig/client/TestZeroConfigClient.java
@@ -27,12 +27,10 @@ import java.io.IOException;
 import java.net.MulticastSocket;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Optional;
 import org.apache.servicecomb.registry.api.registry.Microservice;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstanceStatus;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstances;
-import org.apache.servicecomb.zeroconfig.ZeroConfigRegistration;
 import org.apache.servicecomb.zeroconfig.server.ServerMicroserviceInstance;
 import org.apache.servicecomb.zeroconfig.server.ZeroConfigRegistryService;
 import org.junit.Assert;
@@ -68,7 +66,8 @@ public class TestZeroConfigClient {
   @Before
   public void setUp() {
     MockitoAnnotations.initMocks(this);
-    target = ZeroConfigClient.INSTANCE.initZeroConfigClientWithMocked(zeroConfigRegistryService, multicastSocket);
+    target = ZeroConfigClient.INSTANCE
+        .initZeroConfigClientWithMocked(zeroConfigRegistryService, multicastSocket);
 
     prepareSelfMicroserviceAndInstance();
   }
@@ -97,8 +96,8 @@ public class TestZeroConfigClient {
     microserviceInstance.setHostName(host);
 
     microservice.setInstance(microserviceInstance);
-    ZeroConfigRegistration.INSTANCE.setSelfMicroservice(microservice);
-    ZeroConfigRegistration.INSTANCE.setSelfMicroserviceInstance(microserviceInstance);
+    target.setSelfMicroservice(microservice);
+    target.setSelfMicroserviceInstance(microserviceInstance);
   }
 
   private ServerMicroserviceInstance prepareServerServiceInstance(boolean withEndpoint) {
@@ -145,7 +144,7 @@ public class TestZeroConfigClient {
   @Test
   public void test_unregister_withCorrectData_UnregisterShouldSucceed() {
     when(zeroConfigRegistryService.findServiceInstance(selfServiceId, selfInstanceId))
-        .thenReturn(Optional.of(prepareServerServiceInstance(true)));
+        .thenReturn(prepareServerServiceInstance(true));
 
     boolean returnedResult = target.unregister();
 
@@ -155,7 +154,7 @@ public class TestZeroConfigClient {
   @Test
   public void test_unregister_withWrongData_UnregisterShouldFail() {
     when(zeroConfigRegistryService.findServiceInstance(selfServiceId, selfInstanceId))
-        .thenReturn(Optional.empty());
+        .thenReturn(null);
 
     boolean returnedResult = target.unregister();
 
@@ -165,7 +164,7 @@ public class TestZeroConfigClient {
   @Test
   public void test_unregister_MulticastThrowException_UnregisterShouldFail() throws IOException {
     when(zeroConfigRegistryService.findServiceInstance(selfServiceId, selfInstanceId))
-        .thenReturn(Optional.of(prepareServerServiceInstance(true)));
+        .thenReturn(prepareServerServiceInstance(true));
     doThrow(IOException.class).when(multicastSocket).send(anyObject());
 
     boolean returnedResult = target.unregister();
@@ -178,9 +177,7 @@ public class TestZeroConfigClient {
   public void test_getMicroservice_forItself_shouldReturnItself_And_NotCallZeroConfigRegistryService() {
     Microservice returnedResult = target.getMicroservice(selfServiceId);
 
-    Assert
-        .assertEquals(ZeroConfigRegistration.INSTANCE.getSelfMicroservice().getServiceId(),
-            returnedResult.getServiceId());
+    Assert.assertEquals(target.getSelfMicroservice().getServiceId(), returnedResult.getServiceId());
     verifyZeroInteractions(zeroConfigRegistryService);
   }
 
@@ -212,12 +209,11 @@ public class TestZeroConfigClient {
   }
 
 
-
   // test findMicroserviceInstance method
   @Test
   public void test_findMicroserviceInstance_forNonExistInstance_shouldReturnNull() {
     when(zeroConfigRegistryService.findServiceInstance(selfServiceId, selfInstanceId))
-        .thenReturn(Optional.empty());
+        .thenReturn(null);
 
     MicroserviceInstance returnedResult = target
         .findMicroserviceInstance(selfServiceId, selfInstanceId);
@@ -228,7 +224,7 @@ public class TestZeroConfigClient {
   @Test
   public void test_findMicroServiceInstance_forExistInstance_shouldReturnInstance() {
     when(zeroConfigRegistryService.findServiceInstance(otherServiceId, selfInstanceId))
-        .thenReturn(Optional.of(prepareServerServiceInstance(true)));
+        .thenReturn(prepareServerServiceInstance(true));
 
     MicroserviceInstance returnedResult = target
         .findMicroserviceInstance(otherServiceId, selfInstanceId);
diff --git a/service-registry/registry-zero-config/src/test/java/org/apache/servicecomb/zeroconfig/client/TestZeroConfigRegistryClientImpl.java b/service-registry/registry-zero-config/src/test/java/org/apache/servicecomb/zeroconfig/client/TestZeroConfigRegistryClientImpl.java
index fce6c17..1974bde 100644
--- a/service-registry/registry-zero-config/src/test/java/org/apache/servicecomb/zeroconfig/client/TestZeroConfigRegistryClientImpl.java
+++ b/service-registry/registry-zero-config/src/test/java/org/apache/servicecomb/zeroconfig/client/TestZeroConfigRegistryClientImpl.java
@@ -45,7 +45,6 @@ import java.io.IOException;
 import java.net.MulticastSocket;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Optional;
 
 public class TestZeroConfigRegistryClientImpl {
 
@@ -303,7 +302,7 @@ public class TestZeroConfigRegistryClientImpl {
   public void test_unregisterMicroserviceInstance_whenInstanceNotExist_shoulReturnFalse()
       throws IOException {
     when(zeroConfigRegistryService.findServiceInstance(selfServiceId, selfInstanceId))
-        .thenReturn(Optional.empty());
+        .thenReturn(null);
 
     boolean returnedResult = target.unregisterMicroserviceInstance(selfServiceId, selfInstanceId);
 
@@ -316,7 +315,7 @@ public class TestZeroConfigRegistryClientImpl {
   public void test_unregisterMicroserviceInstance_withNullInstanceId_shouldGenerateInstanceId_and_succeed()
       throws IOException {
     when(zeroConfigRegistryService.findServiceInstance(selfServiceId, selfInstanceId))
-        .thenReturn(Optional.of(prepareServerServiceInstance(true)));
+        .thenReturn(prepareServerServiceInstance(true));
     doNothing().when(multicastSocket).send(anyObject());
 
     boolean returnedResult = target.unregisterMicroserviceInstance(selfServiceId, selfInstanceId);
@@ -381,7 +380,7 @@ public class TestZeroConfigRegistryClientImpl {
   @Test
   public void test_findServiceInstance_forNonExistInstance_shouldReturnNull() {
     when(zeroConfigRegistryService.findServiceInstance(selfServiceId, selfInstanceId))
-        .thenReturn(Optional.empty());
+        .thenReturn(null);
 
     MicroserviceInstance returnedResult = target.findServiceInstance(selfServiceId, selfInstanceId);
 
@@ -391,7 +390,7 @@ public class TestZeroConfigRegistryClientImpl {
   @Test
   public void test_findServiceInstance_forExistInstance_shouldReturnInstance() {
     when(zeroConfigRegistryService.findServiceInstance(otherServiceId, selfInstanceId))
-        .thenReturn(Optional.of(prepareServerServiceInstance(true)));
+        .thenReturn(prepareServerServiceInstance(true));
 
     MicroserviceInstance returnedResult = target
         .findServiceInstance(otherServiceId, selfInstanceId);
diff --git a/service-registry/registry-zero-config/src/test/java/org/apache/servicecomb/zeroconfig/server/TestZeroConfigRegistryService.java b/service-registry/registry-zero-config/src/test/java/org/apache/servicecomb/zeroconfig/server/TestZeroConfigRegistryService.java
index d264464..ed73d44 100644
--- a/service-registry/registry-zero-config/src/test/java/org/apache/servicecomb/zeroconfig/server/TestZeroConfigRegistryService.java
+++ b/service-registry/registry-zero-config/src/test/java/org/apache/servicecomb/zeroconfig/server/TestZeroConfigRegistryService.java
@@ -25,7 +25,6 @@ import org.mockito.MockitoAnnotations;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 
 import static org.apache.servicecomb.zeroconfig.ZeroConfigRegistryConstants.APP_ID;
 import static org.apache.servicecomb.zeroconfig.ZeroConfigRegistryConstants.ENDPOINTS;
@@ -175,20 +174,18 @@ public class TestZeroConfigRegistryService {
   public void test_findServiceInstance_whenInstanceExist_shouldSucceed() {
     ServerUtil.microserviceInstanceMap = prepareServiceInstanceMap(false);
 
-    Optional<ServerMicroserviceInstance> returnedResult = target
-        .findServiceInstance(serviceId, instanceId);
+    ServerMicroserviceInstance returnedResult = target.findServiceInstance(serviceId, instanceId);
 
-    Assert.assertTrue(returnedResult.isPresent());
+    Assert.assertNotNull(returnedResult);
   }
 
   @Test
   public void test_findServiceInstance_whenInstanceNotExist_shouldReturnEmptyOptionalObject() {
     ServerUtil.microserviceInstanceMap = prepareServiceInstanceMap(false);
 
-    Optional<ServerMicroserviceInstance> returnedResult = target
-        .findServiceInstance(serviceId, instanceId1);
+    ServerMicroserviceInstance returnedResult = target.findServiceInstance(serviceId, instanceId1);
 
-    Assert.assertFalse(returnedResult.isPresent());
+    Assert.assertNull(returnedResult);
   }
 
   @Test(expected = IllegalArgumentException.class)
@@ -202,11 +199,11 @@ public class TestZeroConfigRegistryService {
   public void test_getMicroserviceInstance_whenServiceHasInstance_shouldReturnAllInstances() {
     ServerUtil.microserviceInstanceMap = prepareServiceInstanceMap(true);
 
-    Optional<List<ServerMicroserviceInstance>> returnedResult = target
+    List<ServerMicroserviceInstance> returnedResult = target
         .getMicroserviceInstance(serviceId, serviceId);
 
-    Assert.assertTrue(returnedResult.isPresent());
-    Assert.assertEquals(2, returnedResult.get().size());
+    Assert.assertNotNull(returnedResult);
+    Assert.assertEquals(2, returnedResult.size());
   }
 
   @Test