You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ji...@apache.org on 2022/09/25 16:26:51 UTC

[shardingsphere] branch master updated: Revise Nacos impl (#21177)

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

jianglongtao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new b18ace51ea1 Revise Nacos impl (#21177)
b18ace51ea1 is described below

commit b18ace51ea19f04e36a1083543ced78889d9b84c
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Mon Sep 26 00:26:43 2022 +0800

    Revise Nacos impl (#21177)
    
    * Revise Nacos impl
    
    * Revise Nacos impl
---
 .../metadata/database/schema/SchemaManager.java    |   1 -
 .../mode/manager/ContextManager.java               |   4 +-
 .../pom.xml                                        |   7 +-
 .../repository/cluster/nacos/NacosRepository.java  | 183 +++++++++------------
 .../cluster/nacos/entity/ServiceMetadata.java      |   9 +-
 .../nacos/listener/NamingEventListener.java        | 117 +++++++------
 .../{MetadataUtil.java => NacosMetaDataUtil.java}  |   9 +-
 .../cluster/nacos/NacosRepositoryTest.java         |  68 ++++----
 .../cluster/nacos/props/NacosPropertiesTest.java   |   2 +-
 .../shardingsphere-proxy-bootstrap/pom.xml         |   5 -
 10 files changed, 179 insertions(+), 226 deletions(-)

diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/SchemaManager.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/SchemaManager.java
index 6dca5b56e3e..413e60b22ea 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/SchemaManager.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/SchemaManager.java
@@ -30,7 +30,6 @@ import java.util.stream.Collectors;
  */
 public final class SchemaManager {
     
-    
     /**
      * Get to be added tables by schemas.
      *
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index 9fd75bd78d1..9230e395af2 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -484,8 +484,8 @@ public final class ContextManager implements AutoCloseable {
             MetaDataContexts reloadedMetaDataContexts = createMetaDataContexts(databaseName, switchingResource, null);
             deletedSchemaNames(databaseName, reloadedMetaDataContexts.getMetaData().getDatabase(databaseName), metaDataContexts.getMetaData().getDatabase(databaseName));
             metaDataContexts = reloadedMetaDataContexts;
-            metaDataContexts.getMetaData().getDatabases().values().forEach(each -> each.getSchemas().forEach((schemaName, schema) ->
-                    metaDataContexts.getPersistService().getDatabaseMetaDataService().compareAndPersist(each.getName(), schemaName, schema)));
+            metaDataContexts.getMetaData().getDatabases().values().forEach(
+                    each -> each.getSchemas().forEach((schemaName, schema) -> metaDataContexts.getPersistService().getDatabaseMetaDataService().compareAndPersist(each.getName(), schemaName, schema)));
         } catch (final SQLException ex) {
             log.error("Reload database: {} failed", databaseName, ex);
         }
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/pom.xml b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/pom.xml
index e52070736a1..c7eca44276f 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/pom.xml
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/pom.xml
@@ -27,16 +27,21 @@
     <artifactId>shardingsphere-cluster-mode-repository-nacos</artifactId>
     <name>${project.artifactId}</name>
     
+    <properties>
+        <nacos.version>1.4.2</nacos.version>
+    </properties>
+    
     <dependencies>
         <dependency>
             <groupId>org.apache.shardingsphere</groupId>
             <artifactId>shardingsphere-cluster-mode-repository-api</artifactId>
             <version>${project.version}</version>
         </dependency>
+        
         <dependency>
             <groupId>com.alibaba.nacos</groupId>
             <artifactId>nacos-client</artifactId>
-            <version>1.4.2</version>
+            <version>${nacos.version}</version>
         </dependency>
     </dependencies>
 </project>
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/src/main/java/org/apache/shardingsphere/mode/repository/cluster/nacos/NacosRepository.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster [...]
index 764a9244fdb..7450cc7dd88 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/src/main/java/org/apache/shardingsphere/mode/repository/cluster/nacos/NacosRepository.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/src/main/java/org/apache/shardingsphere/mode/repository/cluster/nacos/NacosRepository.java
@@ -24,7 +24,9 @@ import com.alibaba.nacos.api.naming.PreservedMetadataKeys;
 import com.alibaba.nacos.api.naming.pojo.Instance;
 import com.alibaba.nacos.common.utils.CollectionUtils;
 import com.alibaba.nacos.common.utils.StringUtils;
+import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
+import lombok.SneakyThrows;
 import org.apache.shardingsphere.infra.instance.utils.IpUtils;
 import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
 import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepositoryConfiguration;
@@ -36,13 +38,15 @@ import org.apache.shardingsphere.mode.repository.cluster.nacos.entity.ServiceMet
 import org.apache.shardingsphere.mode.repository.cluster.nacos.listener.NamingEventListener;
 import org.apache.shardingsphere.mode.repository.cluster.nacos.props.NacosProperties;
 import org.apache.shardingsphere.mode.repository.cluster.nacos.props.NacosPropertyKey;
-import org.apache.shardingsphere.mode.repository.cluster.nacos.utils.MetadataUtil;
+import org.apache.shardingsphere.mode.repository.cluster.nacos.utils.NacosMetaDataUtil;
 
+import java.util.Collection;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.Properties;
@@ -65,20 +69,18 @@ public final class NacosRepository implements ClusterPersistRepository {
     @Override
     public void init(final ClusterPersistRepositoryConfiguration config) {
         nacosProps = new NacosProperties(config.getProps());
-        initClient(config);
+        client = createClient(config);
         initServiceMetadata();
     }
     
-    private void initClient(final ClusterPersistRepositoryConfiguration config) {
+    private NamingService createClient(final ClusterPersistRepositoryConfiguration config) {
         Properties props = new Properties();
         props.setProperty("serverAddr", config.getServerLists());
         props.setProperty("namespace", config.getNamespace());
         try {
-            client = NamingFactory.createNamingService(props);
-            // CHECKSTYLE:OFF
-        } catch (Exception cause) {
-            // CHECKSTYLE:ON
-            throw new ClusterPersistRepositoryException(cause);
+            return NamingFactory.createNamingService(props);
+        } catch (final NacosException ex) {
+            throw new ClusterPersistRepositoryException(ex);
         }
     }
     
@@ -93,41 +95,31 @@ public final class NacosRepository implements ClusterPersistRepository {
                 each.setIp(ip);
                 each.setPort(new AtomicInteger(port));
             }
-            // CHECKSTYLE:OFF
-        } catch (Exception cause) {
-            // CHECKSTYLE:ON
-            throw new ClusterPersistRepositoryException(cause);
+        } catch (final NacosException ex) {
+            throw new ClusterPersistRepositoryException(ex);
         }
     }
     
     @Override
     public void persistEphemeral(final String key, final String value) {
         try {
-            if (Objects.isNull(value)) {
-                throw new IllegalArgumentException("Value cannot be null");
-            }
-            if (!findExisted(key, true).isEmpty()) {
+            Preconditions.checkNotNull(value, "Value can not be null");
+            if (!findExistedInstance(key, true).isEmpty()) {
                 delete(key);
             }
             put(key, value, true);
-            // CHECKSTYLE:OFF
-        } catch (Exception cause) {
-            // CHECKSTYLE:ON
-            throw new ClusterPersistRepositoryException(cause);
+        } catch (final NacosException ex) {
+            throw new ClusterPersistRepositoryException(ex);
         }
     }
     
     @Override
     public void persistExclusiveEphemeral(final String key, final String value) {
         try {
-            if (!findExisted(key, true).isEmpty()) {
-                throw new IllegalStateException("Key: " + key + " already exists");
-            }
+            Preconditions.checkState(findExistedInstance(key, true).isEmpty(), "Key `%s` already exists", key);
             put(key, value, true);
-            // CHECKSTYLE:OFF
-        } catch (Exception cause) {
-            // CHECKSTYLE:ON
-            throw new ClusterPersistRepositoryException(cause);
+        } catch (final NacosException ex) {
+            throw new ClusterPersistRepositoryException(ex);
         }
     }
     
@@ -147,19 +139,17 @@ public final class NacosRepository implements ClusterPersistRepository {
         try {
             for (ServiceMetadata each : serviceController.getAllServices()) {
                 NamingEventListener eventListener = each.getListener();
-                if (Objects.isNull(eventListener)) {
-                    eventListener = new NamingEventListener();
-                    eventListener.put(key, listener);
-                    each.setListener(eventListener);
-                    client.subscribe(each.getServiceName(), eventListener);
-                } else {
+                if (null != eventListener) {
                     eventListener.put(key, listener);
+                    return;
                 }
+                eventListener = new NamingEventListener();
+                eventListener.put(key, listener);
+                each.setListener(eventListener);
+                client.subscribe(each.getServiceName(), eventListener);
             }
-            // CHECKSTYLE:OFF
-        } catch (Exception cause) {
-            // CHECKSTYLE:ON
-            throw new ClusterPersistRepositoryException(cause);
+        } catch (final NacosException ex) {
+            throw new ClusterPersistRepositoryException(ex);
         }
     }
     
@@ -167,16 +157,14 @@ public final class NacosRepository implements ClusterPersistRepository {
     public String get(final String key) {
         try {
             for (ServiceMetadata each : serviceController.getAllServices()) {
-                Optional<Instance> optional = findExisted(key, each.isEphemeral()).stream().max(Comparator.comparing(MetadataUtil::getTimestamp));
-                if (optional.isPresent()) {
-                    return MetadataUtil.getValue(optional.get());
+                Optional<Instance> instance = findExistedInstance(key, each.isEphemeral()).stream().max(Comparator.comparing(NacosMetaDataUtil::getTimestamp));
+                if (instance.isPresent()) {
+                    return NacosMetaDataUtil.getValue(instance.get());
                 }
             }
             return null;
-            // CHECKSTYLE:OFF
-        } catch (Exception cause) {
-            // CHECKSTYLE:ON
-            throw new ClusterPersistRepositoryException(cause);
+        } catch (final NacosException ex) {
+            throw new ClusterPersistRepositoryException(ex);
         }
     }
     
@@ -185,9 +173,9 @@ public final class NacosRepository implements ClusterPersistRepository {
         try {
             Stream<String> concatKeys = Stream.empty();
             for (ServiceMetadata each : serviceController.getAllServices()) {
-                Stream<String> keys = findExisted(each.isEphemeral()).stream()
+                Stream<String> keys = findExistedInstance(each.isEphemeral()).stream()
                         .map(instance -> {
-                            String fullPath = MetadataUtil.getKey(instance);
+                            String fullPath = NacosMetaDataUtil.getKey(instance);
                             if (fullPath.startsWith(key + PATH_SEPARATOR)) {
                                 String pathWithoutPrefix = fullPath.substring((key + PATH_SEPARATOR).length());
                                 return pathWithoutPrefix.contains(PATH_SEPARATOR) ? pathWithoutPrefix.substring(0, pathWithoutPrefix.indexOf(PATH_SEPARATOR)) : pathWithoutPrefix;
@@ -197,34 +185,28 @@ public final class NacosRepository implements ClusterPersistRepository {
                 concatKeys = Stream.concat(concatKeys, keys);
             }
             return concatKeys.distinct().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
-            // CHECKSTYLE:OFF
-        } catch (Exception cause) {
-            // CHECKSTYLE:ON
-            throw new ClusterPersistRepositoryException(cause);
+        } catch (final NacosException ex) {
+            throw new ClusterPersistRepositoryException(ex);
         }
     }
     
     @Override
     public void persist(final String key, final String value) {
         try {
-            if (Objects.isNull(value)) {
-                throw new IllegalArgumentException("Value cannot be null");
-            }
-            Optional<Instance> optional = findExisted(key, false).stream().max(Comparator.comparing(MetadataUtil::getTimestamp));
-            if (optional.isPresent()) {
-                update(optional.get(), value);
+            Preconditions.checkNotNull(value, "Value can not be null");
+            Optional<Instance> instance = findExistedInstance(key, false).stream().max(Comparator.comparing(NacosMetaDataUtil::getTimestamp));
+            if (instance.isPresent()) {
+                update(instance.get(), value);
             } else {
                 put(key, value, false);
             }
-            // CHECKSTYLE:OFF
-        } catch (Exception cause) {
-            // CHECKSTYLE:ON
-            throw new ClusterPersistRepositoryException(cause);
+        } catch (final NacosException ex) {
+            throw new ClusterPersistRepositoryException(ex);
         }
     }
     
-    private void put(final String key, final String value, final boolean ephemeral) throws NacosException, InterruptedException {
-        final List<KeyValue> keyValues = buildParentPath(key);
+    private void put(final String key, final String value, final boolean ephemeral) throws NacosException {
+        final Collection<KeyValue> keyValues = buildParentPath(key);
         ServiceMetadata serviceMetadata = serviceController.getService(ephemeral);
         Instance instance = new Instance();
         instance.setIp(serviceMetadata.getIp());
@@ -235,40 +217,40 @@ public final class NacosRepository implements ClusterPersistRepository {
             fillEphemeralMetadata(metadataMap);
         }
         metadataMap.put(key, value);
-        metadataMap.put(MetadataUtil.UTC_ZONE_OFFSET.toString(), String.valueOf(MetadataUtil.getTimestamp()));
+        metadataMap.put(NacosMetaDataUtil.UTC_ZONE_OFFSET.toString(), String.valueOf(NacosMetaDataUtil.getTimestamp()));
         instance.setMetadata(metadataMap);
         client.registerInstance(serviceMetadata.getServiceName(), instance);
         keyValues.add(new KeyValue(key, value, ephemeral));
         waitValue(keyValues);
     }
     
-    private List<KeyValue> buildParentPath(final String key) throws NacosException {
-        List<KeyValue> result = new LinkedList<>();
+    private Collection<KeyValue> buildParentPath(final String key) throws NacosException {
+        Collection<KeyValue> result = new LinkedList<>();
         StringBuilder parentPath = new StringBuilder();
         String[] partPath = key.split(PATH_SEPARATOR);
         for (int index = 1; index < partPath.length - 1; index++) {
             String path = parentPath.append(PATH_SEPARATOR).append(partPath[index]).toString();
-            if (findExisted(path, false).isEmpty()) {
+            if (findExistedInstance(path, false).isEmpty()) {
                 result.addAll(build(path));
             }
         }
         return result;
     }
     
-    private List<KeyValue> build(final String key) throws NacosException {
-        List<KeyValue> result = new LinkedList<>();
-        if (findExisted(key, false).isEmpty()) {
+    private Collection<KeyValue> build(final String key) throws NacosException {
+        Collection<KeyValue> result = new LinkedList<>();
+        if (findExistedInstance(key, false).isEmpty()) {
             Instance instance = new Instance();
             ServiceMetadata persistentService = serviceController.getPersistentService();
             instance.setIp(persistentService.getIp());
             instance.setPort(persistentService.getPort());
             instance.setEphemeral(false);
             Map<String, String> metadataMap = new HashMap<>(2, 1);
-            metadataMap.put(key, MetadataUtil.EMPTY);
-            metadataMap.put(MetadataUtil.UTC_ZONE_OFFSET.toString(), String.valueOf(MetadataUtil.getTimestamp()));
+            metadataMap.put(key, "");
+            metadataMap.put(NacosMetaDataUtil.UTC_ZONE_OFFSET.toString(), String.valueOf(NacosMetaDataUtil.getTimestamp()));
             instance.setMetadata(metadataMap);
             client.registerInstance(persistentService.getServiceName(), instance);
-            result.add(new KeyValue(key, MetadataUtil.EMPTY, false));
+            result.add(new KeyValue(key, "", false));
         }
         return result;
     }
@@ -280,15 +262,15 @@ public final class NacosRepository implements ClusterPersistRepository {
         metadataMap.put(PreservedMetadataKeys.IP_DELETE_TIMEOUT, String.valueOf(timeToLiveSeconds * 1000));
     }
     
-    private void update(final Instance instance, final String value) throws NacosException, InterruptedException {
+    private void update(final Instance instance, final String value) throws NacosException {
         Map<String, String> metadataMap = instance.getMetadata();
-        String key = MetadataUtil.getKey(instance);
+        String key = NacosMetaDataUtil.getKey(instance);
         metadataMap.put(key, value);
-        metadataMap.put(MetadataUtil.UTC_ZONE_OFFSET.toString(), String.valueOf(MetadataUtil.getTimestamp()));
+        metadataMap.put(NacosMetaDataUtil.UTC_ZONE_OFFSET.toString(), String.valueOf(NacosMetaDataUtil.getTimestamp()));
         instance.setMetadata(metadataMap);
         ServiceMetadata persistentService = serviceController.getPersistentService();
         client.registerInstance(persistentService.getServiceName(), instance);
-        LinkedList<KeyValue> keyValues = new LinkedList<>();
+        Collection<KeyValue> keyValues = new LinkedList<>();
         keyValues.add(new KeyValue(key, value, instance.isEphemeral()));
         waitValue(keyValues);
     }
@@ -297,38 +279,35 @@ public final class NacosRepository implements ClusterPersistRepository {
     public void delete(final String key) {
         try {
             for (ServiceMetadata each : serviceController.getAllServices()) {
-                List<Instance> instances = findExisted(each.isEphemeral()).stream()
+                Collection<Instance> instances = findExistedInstance(each.isEphemeral()).stream()
                         .filter(instance -> {
-                            String fullPath = MetadataUtil.getKey(instance);
+                            String fullPath = NacosMetaDataUtil.getKey(instance);
                             return fullPath.startsWith(key + PATH_SEPARATOR) || StringUtils.equals(fullPath, key);
                         })
-                        .sorted(Comparator.comparing(MetadataUtil::getKey).reversed()).collect(Collectors.toList());
-                List<KeyValue> keyValues = new LinkedList<>();
+                        .sorted(Comparator.comparing(NacosMetaDataUtil::getKey).reversed()).collect(Collectors.toList());
+                Collection<KeyValue> keyValues = new LinkedList<>();
                 for (Instance instance : instances) {
                     client.deregisterInstance(each.getServiceName(), instance);
-                    keyValues.add(new KeyValue(MetadataUtil.getKey(instance), null, each.isEphemeral()));
+                    keyValues.add(new KeyValue(NacosMetaDataUtil.getKey(instance), null, each.isEphemeral()));
                 }
                 waitValue(keyValues);
             }
-            // CHECKSTYLE:OFF
-        } catch (Exception cause) {
-            // CHECKSTYLE:ON
-            throw new ClusterPersistRepositoryException(cause);
+        } catch (final NacosException ex) {
+            throw new ClusterPersistRepositoryException(ex);
         }
     }
     
-    private List<Instance> findExisted(final String key, final boolean ephemeral) throws NacosException {
-        ServiceMetadata service = serviceController.getService(ephemeral);
-        return client.getAllInstances(service.getServiceName(), false).stream()
-                .filter(instance -> Objects.equals(key, MetadataUtil.getKey(instance))).collect(Collectors.toList());
+    private Collection<Instance> findExistedInstance(final String key, final boolean ephemeral) throws NacosException {
+        return client.getAllInstances(serviceController.getService(ephemeral).getServiceName(), false).stream()
+                .filter(each -> Objects.equals(key, NacosMetaDataUtil.getKey(each))).collect(Collectors.toList());
     }
     
-    private List<Instance> findExisted(final boolean ephemeral) throws NacosException {
-        ServiceMetadata service = serviceController.getService(ephemeral);
-        return client.getAllInstances(service.getServiceName(), false);
+    private Collection<Instance> findExistedInstance(final boolean ephemeral) throws NacosException {
+        return client.getAllInstances(serviceController.getService(ephemeral).getServiceName(), false);
     }
     
-    private void waitValue(final List<KeyValue> keyValues) throws NacosException, InterruptedException {
+    @SneakyThrows(InterruptedException.class)
+    private void waitValue(final Collection<KeyValue> keyValues) throws NacosException {
         if (!isAvailable(keyValues)) {
             long retryIntervalMilliseconds = nacosProps.getValue(NacosPropertyKey.RETRY_INTERVAL_MILLISECONDS);
             int maxRetries = nacosProps.getValue(NacosPropertyKey.MAX_RETRIES);
@@ -342,23 +321,21 @@ public final class NacosRepository implements ClusterPersistRepository {
         }
     }
     
-    private boolean isAvailable(final List<KeyValue> keyValues) throws NacosException {
+    private boolean isAvailable(final Collection<KeyValue> keyValues) throws NacosException {
         Map<Boolean, List<KeyValue>> keyValueMap = keyValues.stream().collect(Collectors.groupingBy(KeyValue::isEphemeral));
-        for (Map.Entry<Boolean, List<KeyValue>> entry : keyValueMap.entrySet()) {
+        for (Entry<Boolean, List<KeyValue>> entry : keyValueMap.entrySet()) {
             ServiceMetadata service = serviceController.getService(entry.getKey());
-            Map<String, List<Instance>> instanceMap = client.getAllInstances(service.getServiceName(), false).stream()
-                    .collect(Collectors.groupingBy(MetadataUtil::getKey));
+            Map<String, List<Instance>> instanceMap = client.getAllInstances(service.getServiceName(), false).stream().collect(Collectors.groupingBy(NacosMetaDataUtil::getKey));
             keyValues.removeIf(keyValue -> {
-                List<Instance> instances = instanceMap.get(keyValue.getKey());
+                Collection<Instance> instances = instanceMap.get(keyValue.getKey());
                 String value = keyValue.getValue();
-                return CollectionUtils.isNotEmpty(instances) ? instances.stream().anyMatch(instance -> StringUtils.equals(MetadataUtil.getValue(instance), value)) : Objects.isNull(value);
+                return CollectionUtils.isNotEmpty(instances) ? instances.stream().anyMatch(instance -> StringUtils.equals(NacosMetaDataUtil.getValue(instance), value)) : Objects.isNull(value);
             });
         }
         return keyValues.isEmpty();
     }
     
     private long getSleepTimeMs(final int retryCount, final long baseSleepTimeMs) {
-        // copied from Hadoop's RetryPolicies.java
         return baseSleepTimeMs * Math.max(1, new Random().nextInt(1 << (retryCount + 1)));
     }
     
@@ -366,10 +343,8 @@ public final class NacosRepository implements ClusterPersistRepository {
     public void close() {
         try {
             client.shutDown();
-            // CHECKSTYLE:OFF
-        } catch (Exception cause) {
-            // CHECKSTYLE:ON
-            throw new ClusterPersistRepositoryException(cause);
+        } catch (final NacosException ex) {
+            throw new ClusterPersistRepositoryException(ex);
         }
     }
     
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/src/main/java/org/apache/shardingsphere/mode/repository/cluster/nacos/entity/ServiceMetadata.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere- [...]
index 5dd69dcf90a..3da23488c17 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/src/main/java/org/apache/shardingsphere/mode/repository/cluster/nacos/entity/ServiceMetadata.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/src/main/java/org/apache/shardingsphere/mode/repository/cluster/nacos/entity/ServiceMetadata.java
@@ -28,23 +28,18 @@ import java.util.concurrent.atomic.AtomicInteger;
  * Service metadata.
  */
 @RequiredArgsConstructor
+@Getter
+@Setter
 public final class ServiceMetadata {
     
-    @Getter
     private final String serviceName;
     
-    @Getter
-    @Setter
     private String ip;
     
-    @Setter
     private AtomicInteger port;
     
-    @Getter
-    @Setter
     private NamingEventListener listener;
     
-    @Getter
     private final boolean ephemeral;
     
     /**
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/src/main/java/org/apache/shardingsphere/mode/repository/cluster/nacos/listener/NamingEventListener.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardings [...]
index c2b3e97984b..89a10ebd93e 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/src/main/java/org/apache/shardingsphere/mode/repository/cluster/nacos/listener/NamingEventListener.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/src/main/java/org/apache/shardingsphere/mode/repository/cluster/nacos/listener/NamingEventListener.java
@@ -22,8 +22,9 @@ import com.alibaba.nacos.api.naming.listener.EventListener;
 import com.alibaba.nacos.api.naming.listener.NamingEvent;
 import com.alibaba.nacos.api.naming.pojo.Instance;
 import org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEvent;
+import org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEvent.Type;
 import org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEventListener;
-import org.apache.shardingsphere.mode.repository.cluster.nacos.utils.MetadataUtil;
+import org.apache.shardingsphere.mode.repository.cluster.nacos.utils.NacosMetaDataUtil;
 
 import java.util.Comparator;
 import java.util.HashMap;
@@ -45,84 +46,82 @@ public final class NamingEventListener implements EventListener {
     
     @Override
     public void onEvent(final Event event) {
-        if (event instanceof NamingEvent) {
-            NamingEvent namingEvent = (NamingEvent) event;
-            List<Instance> instances = namingEvent.getInstances().stream().sorted(Comparator.comparing(MetadataUtil::getKey)).collect(Collectors.toList());
-            List<WatchData> watchDataList = new LinkedList<>();
-            synchronized (this) {
-                instances.forEach(instance -> prefixListenerMap.forEach((prefixPath, listener) -> {
-                    String key = MetadataUtil.getKey(instance);
-                    if (key.startsWith(prefixPath)) {
-                        Instance preInstance = preInstances.remove(key);
-                        WatchData watchData = new WatchData(key, preInstance, instance, listener);
-                        watchDataList.add(watchData);
-                    }
-                }));
-                preInstances.values().stream().sorted(Comparator.comparing(MetadataUtil::getKey).reversed()).forEach(instance -> prefixListenerMap.forEach((prefixPath, listener) -> {
-                    String key = MetadataUtil.getKey(instance);
-                    if (key.startsWith(prefixPath)) {
-                        WatchData watchData = new WatchData(key, instance, null, listener);
-                        watchDataList.add(watchData);
-                    }
-                }));
-                watchDataList.forEach(watchData -> {
-                    String key = watchData.getKey();
-                    Instance preInstance = watchData.getPreInstance();
-                    Instance instance = watchData.getInstance();
-                    DataChangedEventListener listener = watchData.getListener();
-                    DataChangedEvent.Type changedType = getEventChangedType(preInstance, instance);
-                    switch (changedType) {
-                        case ADDED:
-                        case UPDATED:
-                            listener.onChange(new DataChangedEvent(key, MetadataUtil.getValue(instance), changedType));
-                            break;
-                        case DELETED:
-                            listener.onChange(new DataChangedEvent(key, MetadataUtil.getValue(preInstance), changedType));
-                            break;
-                        default:
-                    }
-                });
-                setPreInstances(instances);
-            }
+        if (!(event instanceof NamingEvent)) {
+            return;
+        }
+        NamingEvent namingEvent = (NamingEvent) event;
+        List<Instance> instances = namingEvent.getInstances().stream().sorted(Comparator.comparing(NacosMetaDataUtil::getKey)).collect(Collectors.toList());
+        List<WatchData> watchDataList = new LinkedList<>();
+        synchronized (this) {
+            instances.forEach(instance -> prefixListenerMap.forEach((prefixPath, listener) -> {
+                String key = NacosMetaDataUtil.getKey(instance);
+                if (key.startsWith(prefixPath)) {
+                    Instance preInstance = preInstances.remove(key);
+                    WatchData watchData = new WatchData(key, preInstance, instance, listener);
+                    watchDataList.add(watchData);
+                }
+            }));
+            preInstances.values().stream().sorted(Comparator.comparing(NacosMetaDataUtil::getKey).reversed()).forEach(instance -> prefixListenerMap.forEach((prefixPath, listener) -> {
+                String key = NacosMetaDataUtil.getKey(instance);
+                if (key.startsWith(prefixPath)) {
+                    WatchData watchData = new WatchData(key, instance, null, listener);
+                    watchDataList.add(watchData);
+                }
+            }));
+            watchDataList.forEach(watchData -> {
+                String key = watchData.getKey();
+                Instance preInstance = watchData.getPreInstance();
+                Instance instance = watchData.getInstance();
+                DataChangedEventListener listener = watchData.getListener();
+                DataChangedEvent.Type changedType = getEventChangedType(preInstance, instance);
+                switch (changedType) {
+                    case ADDED:
+                    case UPDATED:
+                        listener.onChange(new DataChangedEvent(key, NacosMetaDataUtil.getValue(instance), changedType));
+                        break;
+                    case DELETED:
+                        listener.onChange(new DataChangedEvent(key, NacosMetaDataUtil.getValue(preInstance), changedType));
+                        break;
+                    default:
+                }
+            });
+            setPreInstances(instances);
         }
     }
     
-    private DataChangedEvent.Type getEventChangedType(final Instance preInstance, final Instance instance) {
-        DataChangedEvent.Type result;
+    private Type getEventChangedType(final Instance preInstance, final Instance instance) {
         if (Objects.isNull(preInstance) && Objects.nonNull(instance)) {
-            result = DataChangedEvent.Type.ADDED;
-        } else if (Objects.nonNull(preInstance) && Objects.nonNull(instance)
-                && MetadataUtil.getTimestamp(preInstance) != MetadataUtil.getTimestamp(instance)) {
-            result = DataChangedEvent.Type.UPDATED;
-        } else if (Objects.nonNull(preInstance) && Objects.isNull(instance)) {
-            result = DataChangedEvent.Type.DELETED;
-        } else {
-            return DataChangedEvent.Type.IGNORED;
+            return DataChangedEvent.Type.ADDED;
+        }
+        if (Objects.nonNull(preInstance) && Objects.nonNull(instance) && NacosMetaDataUtil.getTimestamp(preInstance) != NacosMetaDataUtil.getTimestamp(instance)) {
+            return DataChangedEvent.Type.UPDATED;
         }
-        return result;
+        if (Objects.nonNull(preInstance) && Objects.isNull(instance)) {
+            return DataChangedEvent.Type.DELETED;
+        }
+        return DataChangedEvent.Type.IGNORED;
     }
     
     /**
-     * Update preInstances.
+     * Update pre instances.
      *
      * @param instances instances
      */
     public void setPreInstances(final List<Instance> instances) {
-        this.preInstances = instances.stream().filter(instance -> {
-            for (String prefixPath : prefixListenerMap.keySet()) {
-                String key = MetadataUtil.getKey(instance);
-                if (key.startsWith(prefixPath)) {
+        preInstances = instances.stream().filter(instance -> {
+            for (String each : prefixListenerMap.keySet()) {
+                if (NacosMetaDataUtil.getKey(instance).startsWith(each)) {
                     return true;
                 }
             }
             return false;
-        }).collect(Collectors.toMap(MetadataUtil::getKey, Function.identity(), (a, b) -> MetadataUtil.getTimestamp(a) > MetadataUtil.getTimestamp(b) ? a : b));
+        }).collect(Collectors.toMap(NacosMetaDataUtil::getKey, Function.identity(), (a, b) -> NacosMetaDataUtil.getTimestamp(a) > NacosMetaDataUtil.getTimestamp(b) ? a : b));
     }
     
     /**
-     * Put prefixPath and listener.
+     * Put prefix path and listener.
      *
-     * @param prefixPath prefixPath
+     * @param prefixPath prefix path
      * @param listener listener
      */
     public synchronized void put(final String prefixPath, final DataChangedEventListener listener) {
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/src/main/java/org/apache/shardingsphere/mode/repository/cluster/nacos/utils/MetadataUtil.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-clus [...]
similarity index 95%
rename from shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/src/main/java/org/apache/shardingsphere/mode/repository/cluster/nacos/utils/MetadataUtil.java
rename to shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/src/main/java/org/apache/shardingsphere/mode/repository/cluster/nacos/utils/NacosMetaDataUtil.java
index c2056759861..bc74ca687ae 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/src/main/java/org/apache/shardingsphere/mode/repository/cluster/nacos/utils/MetadataUtil.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/src/main/java/org/apache/shardingsphere/mode/repository/cluster/nacos/utils/NacosMetaDataUtil.java
@@ -28,12 +28,10 @@ import java.time.LocalDateTime;
 import java.time.ZoneOffset;
 
 /**
- * Metadata util.
+ * Nacos meta data util.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class MetadataUtil {
-    
-    public static final String EMPTY = "";
+public final class NacosMetaDataUtil {
     
     public static final ZoneOffset UTC_ZONE_OFFSET = ZoneOffset.of("+8");
     
@@ -43,7 +41,6 @@ public final class MetadataUtil {
      * @param instance instance
      * @return timestamp
      */
-    @SneakyThrows
     public static long getTimestamp(final Instance instance) {
         return Long.parseLong(instance.getMetadata().get(UTC_ZONE_OFFSET.toString()));
     }
@@ -73,7 +70,7 @@ public final class MetadataUtil {
      * @param instance instance
      * @return key
      */
-    @SneakyThrows
+    @SneakyThrows(NacosException.class)
     public static String getKey(final Instance instance) {
         return instance.getMetadata().keySet().stream()
                 .filter(entryKey -> !entryKey.equals(PreservedMetadataKeys.HEART_BEAT_INTERVAL)
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/src/test/java/org/apache/shardingsphere/mode/repository/cluster/nacos/NacosRepositoryTest.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-clu [...]
index 113cac1c176..87949b8b402 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/src/test/java/org/apache/shardingsphere/mode/repository/cluster/nacos/NacosRepositoryTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/src/test/java/org/apache/shardingsphere/mode/repository/cluster/nacos/NacosRepositoryTest.java
@@ -34,7 +34,7 @@ import org.apache.shardingsphere.mode.repository.cluster.nacos.entity.ServiceCon
 import org.apache.shardingsphere.mode.repository.cluster.nacos.entity.ServiceMetadata;
 import org.apache.shardingsphere.mode.repository.cluster.nacos.props.NacosProperties;
 import org.apache.shardingsphere.mode.repository.cluster.nacos.props.NacosPropertyKey;
-import org.apache.shardingsphere.mode.repository.cluster.nacos.utils.MetadataUtil;
+import org.apache.shardingsphere.mode.repository.cluster.nacos.utils.NacosMetaDataUtil;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -53,6 +53,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Properties;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -85,16 +86,15 @@ public final class NacosRepositoryTest {
     }
     
     @Test
-    @SneakyThrows
-    public void assertGetLatestKey() {
+    public void assertGetLatestKey() throws NacosException {
         int total = 2;
         String key = "/test/children/keys/persistent/1";
         List<Instance> instances = new LinkedList<>();
         for (int count = 1; count <= total; count++) {
             Instance instance = new Instance();
-            final Map<String, String> metadataMap = new HashMap<>(2, 1);
+            Map<String, String> metadataMap = new HashMap<>(2, 1);
             metadataMap.put(key, "value" + count);
-            metadataMap.put(MetadataUtil.UTC_ZONE_OFFSET.toString(), String.valueOf(count));
+            metadataMap.put(NacosMetaDataUtil.UTC_ZONE_OFFSET.toString(), String.valueOf(count));
             instance.setMetadata(metadataMap);
             instances.add(instance);
         }
@@ -105,8 +105,7 @@ public final class NacosRepositoryTest {
     }
     
     @Test
-    @SneakyThrows
-    public void assertGetChildrenKeys() {
+    public void assertGetChildrenKeys() throws NacosException {
         Instance instance = new Instance();
         String key = "/test/children/keys/persistent/0";
         instance.setMetadata(Collections.singletonMap(key, "value0"));
@@ -124,8 +123,7 @@ public final class NacosRepositoryTest {
     }
     
     @Test
-    @SneakyThrows
-    public void assertPersistNotExistKey() {
+    public void assertPersistNotExistKey() throws NacosException {
         String key = "/test/children/keys/persistent/1";
         doAnswer(AdditionalAnswers.answerVoid(getRegisterInstanceAnswer())).when(client).registerInstance(anyString(), any(Instance.class));
         REPOSITORY.persist(key, "value4");
@@ -137,12 +135,11 @@ public final class NacosRepositoryTest {
         ServiceMetadata persistentService = serviceController.getPersistentService();
         assertThat(registerType, is(persistentService.getServiceName()));
         assertThat(registerInstance.isEphemeral(), is(false));
-        assertThat(MetadataUtil.getValue(registerInstance), is("value4"));
+        assertThat(NacosMetaDataUtil.getValue(registerInstance), is("value4"));
     }
     
     @Test
-    @SneakyThrows
-    public void assertPersistExistKey() {
+    public void assertPersistExistKey() throws NacosException {
         String ip = "127.0.0.1";
         Instance instance = new Instance();
         instance.setIp(ip);
@@ -166,12 +163,11 @@ public final class NacosRepositoryTest {
         assertThat(registerType, is(persistentService.getServiceName()));
         assertThat(registerInstance.getIp(), is(ip));
         assertThat(registerInstance.isEphemeral(), is(false));
-        assertThat(MetadataUtil.getValue(registerInstance), is("value4"));
+        assertThat(NacosMetaDataUtil.getValue(registerInstance), is("value4"));
     }
     
     @Test
-    @SneakyThrows
-    public void assertPersistEphemeralExistKey() {
+    public void assertPersistEphemeralExistKey() throws NacosException {
         final String key = "/test/children/keys/ephemeral/1";
         final Instance instance = new Instance();
         instance.setEphemeral(true);
@@ -200,7 +196,7 @@ public final class NacosRepositoryTest {
         String registerType = stringArgumentCaptor.getValue();
         assertThat(registerType, is(ephemeralService.getServiceName()));
         assertThat(registerInstance.isEphemeral(), is(true));
-        assertThat(MetadataUtil.getValue(registerInstance), is("value4"));
+        assertThat(NacosMetaDataUtil.getValue(registerInstance), is("value4"));
         Map<String, String> metadata = registerInstance.getMetadata();
         long timeToLiveSeconds = Long.parseLong(NacosPropertyKey.TIME_TO_LIVE_SECONDS.getDefaultValue());
         assertThat(metadata.get(PreservedMetadataKeys.HEART_BEAT_INTERVAL), is(String.valueOf(timeToLiveSeconds * 1000 / 3)));
@@ -223,8 +219,7 @@ public final class NacosRepositoryTest {
     }
     
     @Test
-    @SneakyThrows
-    public void assertPersistEphemeralNotExistKey() {
+    public void assertPersistEphemeralNotExistKey() throws NacosException {
         String key = "/test/children/keys/ephemeral/0";
         doAnswer(AdditionalAnswers.answerVoid(getRegisterInstanceAnswer())).when(client).registerInstance(anyString(), any(Instance.class));
         REPOSITORY.persistEphemeral(key, "value0");
@@ -236,7 +231,7 @@ public final class NacosRepositoryTest {
         ServiceMetadata ephemeralService = serviceController.getEphemeralService();
         assertThat(registerType, is(ephemeralService.getServiceName()));
         assertThat(registerInstance.isEphemeral(), is(true));
-        assertThat(MetadataUtil.getValue(registerInstance), is("value0"));
+        assertThat(NacosMetaDataUtil.getValue(registerInstance), is("value0"));
         Map<String, String> metadata = registerInstance.getMetadata();
         long timeToLiveSeconds = Long.parseLong(NacosPropertyKey.TIME_TO_LIVE_SECONDS.getDefaultValue());
         assertThat(metadata.get(PreservedMetadataKeys.HEART_BEAT_INTERVAL), is(String.valueOf(timeToLiveSeconds * 1000 / 3)));
@@ -245,8 +240,7 @@ public final class NacosRepositoryTest {
     }
     
     @Test
-    @SneakyThrows
-    public void assertDeleteExistKey() {
+    public void assertDeleteExistKey() throws NacosException {
         int total = 3;
         List<Instance> instances = new LinkedList<>();
         for (int count = 1; count <= total; count++) {
@@ -272,15 +266,13 @@ public final class NacosRepositoryTest {
     }
     
     @Test
-    @SneakyThrows
-    public void assertDeleteNotExistKey() {
+    public void assertDeleteNotExistKey() throws NacosException {
         REPOSITORY.delete("/test/children/keys/persistent/1");
         verify(client, times(0)).deregisterInstance(anyString(), any(Instance.class));
     }
     
     @Test
-    @SneakyThrows
-    public void assertWatchAdded() {
+    public void assertWatchAdded() throws NacosException, ExecutionException, InterruptedException {
         ServiceMetadata ephemeralService = serviceController.getEphemeralService();
         ephemeralService.setListener(null);
         String key = "key/key";
@@ -298,21 +290,20 @@ public final class NacosRepositoryTest {
     }
     
     @Test
-    @SneakyThrows
-    public void assertWatchUpdate() {
+    public void assertWatchUpdate() throws NacosException, ExecutionException, InterruptedException {
         ServiceMetadata persistentService = serviceController.getPersistentService();
         persistentService.setListener(null);
         String key = "key/key";
-        long epochMilliseconds = MetadataUtil.getTimestamp();
+        long epochMilliseconds = NacosMetaDataUtil.getTimestamp();
         Instance preInstance = new Instance();
         Map<String, String> metadataMap = new HashMap<>();
         metadataMap.put(key, "value1");
-        metadataMap.put(MetadataUtil.UTC_ZONE_OFFSET.toString(), String.valueOf(epochMilliseconds));
+        metadataMap.put(NacosMetaDataUtil.UTC_ZONE_OFFSET.toString(), String.valueOf(epochMilliseconds));
         preInstance.setMetadata(metadataMap);
         final Instance instance = new Instance();
         metadataMap = new HashMap<>();
         metadataMap.put(key, "value2");
-        metadataMap.put(MetadataUtil.UTC_ZONE_OFFSET.toString(), String.valueOf(epochMilliseconds + 1));
+        metadataMap.put(NacosMetaDataUtil.UTC_ZONE_OFFSET.toString(), String.valueOf(epochMilliseconds + 1));
         instance.setMetadata(metadataMap);
         Event event = new NamingEvent(persistentService.getServiceName(), Collections.singletonList(instance));
         doAnswer(AdditionalAnswers.answerVoid(getListenerAnswer(preInstance, event))).when(client).subscribe(anyString(), any(EventListener.class));
@@ -325,8 +316,7 @@ public final class NacosRepositoryTest {
     }
     
     @Test
-    @SneakyThrows
-    public void assertWatchDelete() {
+    public void assertWatchDelete() throws NacosException, ExecutionException, InterruptedException {
         ServiceMetadata persistentService = serviceController.getPersistentService();
         persistentService.setListener(null);
         String key = "key/key";
@@ -343,8 +333,7 @@ public final class NacosRepositoryTest {
     }
     
     @Test
-    @SneakyThrows
-    public void assertClose() {
+    public void assertClose() throws NacosException {
         REPOSITORY.close();
         verify(client).shutDown();
     }
@@ -354,8 +343,8 @@ public final class NacosRepositoryTest {
     public void assertPersistNotAvailable() {
         try {
             REPOSITORY.persist("/test/children/keys/persistent/1", "value4");
-        } catch (ClusterPersistRepositoryException cause) {
-            throw cause.getCause();
+        } catch (final ClusterPersistRepositoryException ex) {
+            throw ex.getCause();
         }
     }
     
@@ -366,8 +355,8 @@ public final class NacosRepositoryTest {
         ephemeralService.setPort(new AtomicInteger(Integer.MAX_VALUE));
         try {
             REPOSITORY.persistEphemeral("/key2", "value");
-        } catch (ClusterPersistRepositoryException cause) {
-            throw cause.getCause();
+        } catch (final ClusterPersistRepositoryException ex) {
+            throw ex.getCause();
         }
     }
     
@@ -376,7 +365,7 @@ public final class NacosRepositoryTest {
             MemberAccessor accessor = Plugins.getMemberAccessor();
             if (Objects.nonNull(preInstance)) {
                 Map<String, Instance> preInstances = new HashMap<>();
-                preInstances.put(MetadataUtil.getKey(preInstance), preInstance);
+                preInstances.put(NacosMetaDataUtil.getKey(preInstance), preInstance);
                 accessor.set(listener.getClass().getDeclaredField("preInstances"), listener, preInstances);
             }
             listener.onEvent(event);
@@ -399,5 +388,4 @@ public final class NacosRepositoryTest {
             when(client.getAllInstances(serviceName, false)).thenReturn(instances);
         };
     }
-    
 }
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/src/test/java/org/apache/shardingsphere/mode/repository/cluster/nacos/props/NacosPropertiesTest.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphe [...]
index a393b24bb3c..dec672608df 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/src/test/java/org/apache/shardingsphere/mode/repository/cluster/nacos/props/NacosPropertiesTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-nacos/src/test/java/org/apache/shardingsphere/mode/repository/cluster/nacos/props/NacosPropertiesTest.java
@@ -22,7 +22,7 @@ import org.junit.Test;
 import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 public final class NacosPropertiesTest {
     
diff --git a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/pom.xml b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/pom.xml
index 3e1086e1fe2..d0b3f8b514c 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/pom.xml
+++ b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/pom.xml
@@ -93,11 +93,6 @@
             <artifactId>shardingsphere-cluster-mode-repository-etcd</artifactId>
             <version>${project.version}</version>
         </dependency>
-        <dependency>
-            <groupId>org.apache.shardingsphere</groupId>
-            <artifactId>shardingsphere-cluster-mode-repository-nacos</artifactId>
-            <version>${project.version}</version>
-        </dependency>
         <dependency>
             <groupId>org.apache.shardingsphere</groupId>
             <artifactId>shardingsphere-jdbc-core</artifactId>