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 ed602676b [SCB-2813]Nacos implementation not properly read endpoints 
and other properties (#3980)
ed602676b is described below

commit ed602676b13ff585c84a2e1f96be3ab2bcd58eb3
Author: liubao68 <[email protected]>
AuthorDate: Fri Oct 20 09:07:53 2023 +0800

    [SCB-2813]Nacos implementation not properly read endpoints and other 
properties (#3980)
---
 demo/demo-nacos/consumer/pom.xml                   |  4 --
 .../consumer/src/main/resources/application.yml    |  3 -
 demo/demo-nacos/gateway/pom.xml                    |  4 --
 .../gateway/src/main/resources/application.yml     |  4 --
 demo/demo-nacos/pom.xml                            |  4 ++
 demo/demo-nacos/provider/pom.xml                   |  4 --
 .../provider/src/main/resources/application.yml    |  3 -
 .../apache/servicecomb/samples/HelloWorldIT.java   |  2 +-
 .../test-client/src/main/resources/application.yml |  6 --
 .../registry/nacos/NacosConfiguration.java         |  7 +-
 .../servicecomb/registry/nacos/NacosConst.java     | 20 +++++-
 .../servicecomb/registry/nacos/NacosDiscovery.java | 12 ++--
 .../registry/nacos/NacosDiscoveryInstance.java     | 75 ++++++++++++---------
 .../registry/nacos/NacosDiscoveryProperties.java   | 46 -------------
 .../registry/nacos/NacosMicroserviceHandler.java   | 34 ++++------
 .../registry/nacos/NacosRegistration.java          | 77 ++++++++++++++--------
 .../registry/nacos/NacosRegistrationInstance.java  |  2 +-
 .../registry/nacos/NamingServiceManager.java       | 28 ++++++--
 18 files changed, 166 insertions(+), 169 deletions(-)

diff --git a/demo/demo-nacos/consumer/pom.xml b/demo/demo-nacos/consumer/pom.xml
index 6cfe6a756..d1d46fbb5 100644
--- a/demo/demo-nacos/consumer/pom.xml
+++ b/demo/demo-nacos/consumer/pom.xml
@@ -34,10 +34,6 @@
       <groupId>org.apache.servicecomb</groupId>
       <artifactId>java-chassis-spring-boot-starter-standalone</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.apache.logging.log4j</groupId>
-      <artifactId>log4j-core</artifactId>
-    </dependency>
   </dependencies>
 
   <build>
diff --git a/demo/demo-nacos/consumer/src/main/resources/application.yml 
b/demo/demo-nacos/consumer/src/main/resources/application.yml
index f22a361e9..0110e6e27 100644
--- a/demo/demo-nacos/consumer/src/main/resources/application.yml
+++ b/demo/demo-nacos/consumer/src/main/resources/application.yml
@@ -29,8 +29,5 @@ servicecomb:
   rest:
     address: 0.0.0.0:9092
 
-server:
-  port: 9092
-
 
 
diff --git a/demo/demo-nacos/gateway/pom.xml b/demo/demo-nacos/gateway/pom.xml
index 82f407a3b..157bfa5d9 100644
--- a/demo/demo-nacos/gateway/pom.xml
+++ b/demo/demo-nacos/gateway/pom.xml
@@ -38,10 +38,6 @@
       <groupId>org.apache.servicecomb</groupId>
       <artifactId>edge-core</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.apache.logging.log4j</groupId>
-      <artifactId>log4j-core</artifactId>
-    </dependency>
   </dependencies>
   <build>
     <plugins>
diff --git a/demo/demo-nacos/gateway/src/main/resources/application.yml 
b/demo/demo-nacos/gateway/src/main/resources/application.yml
index e40d1f883..3bf90e50b 100644
--- a/demo/demo-nacos/gateway/src/main/resources/application.yml
+++ b/demo/demo-nacos/gateway/src/main/resources/application.yml
@@ -15,9 +15,6 @@
 ## See the License for the specific language governing permissions and
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
-server:
-  port: 9090
-
 servicecomb:
   service:
     application: demo-nacos
@@ -27,7 +24,6 @@ servicecomb:
     nacos:
       enabled: true
       serverAddr: ${PAAS_CSE_NACOS_ENDPOINT:http://127.0.0.1:8848}
-      version: 0.0.1
 
   rest:
     address: 0.0.0.0:9090?sslEnabled=false
diff --git a/demo/demo-nacos/pom.xml b/demo/demo-nacos/pom.xml
index a70d9a9c1..5c82f13c0 100644
--- a/demo/demo-nacos/pom.xml
+++ b/demo/demo-nacos/pom.xml
@@ -51,6 +51,10 @@
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-slf4j-impl</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-core</artifactId>
+    </dependency>
   </dependencies>
 
   <modules>
diff --git a/demo/demo-nacos/provider/pom.xml b/demo/demo-nacos/provider/pom.xml
index f7d240dea..9f930ab78 100644
--- a/demo/demo-nacos/provider/pom.xml
+++ b/demo/demo-nacos/provider/pom.xml
@@ -38,10 +38,6 @@
       <groupId>org.apache.servicecomb</groupId>
       <artifactId>java-chassis-spring-boot-starter-standalone</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.apache.logging.log4j</groupId>
-      <artifactId>log4j-core</artifactId>
-    </dependency>
   </dependencies>
 
   <build>
diff --git a/demo/demo-nacos/provider/src/main/resources/application.yml 
b/demo/demo-nacos/provider/src/main/resources/application.yml
index ba3ff163f..b24d281cd 100644
--- a/demo/demo-nacos/provider/src/main/resources/application.yml
+++ b/demo/demo-nacos/provider/src/main/resources/application.yml
@@ -31,6 +31,3 @@ servicecomb:
   rest:
     address: 0.0.0.0:9094
 
-server:
-  port: 9094
-
diff --git 
a/demo/demo-nacos/test-client/src/main/java/org/apache/servicecomb/samples/HelloWorldIT.java
 
b/demo/demo-nacos/test-client/src/main/java/org/apache/servicecomb/samples/HelloWorldIT.java
index bce145686..2be179a6a 100644
--- 
a/demo/demo-nacos/test-client/src/main/java/org/apache/servicecomb/samples/HelloWorldIT.java
+++ 
b/demo/demo-nacos/test-client/src/main/java/org/apache/servicecomb/samples/HelloWorldIT.java
@@ -34,6 +34,6 @@ public class HelloWorldIT implements CategorizedTestCase {
   private void testHelloWorld() {
     String result = template
         .getForObject(Config.GATEWAY_URL + "/sayHello?name=World", 
String.class);
-    TestMgr.check("\"Hello World\"", result);
+    TestMgr.check("Hello World", result);
   }
 }
diff --git a/demo/demo-nacos/test-client/src/main/resources/application.yml 
b/demo/demo-nacos/test-client/src/main/resources/application.yml
index ea1abdb99..5caa50190 100644
--- a/demo/demo-nacos/test-client/src/main/resources/application.yml
+++ b/demo/demo-nacos/test-client/src/main/resources/application.yml
@@ -15,10 +15,6 @@
 ## See the License for the specific language governing permissions and
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
-# spring boot configurations
-server:
-  port: 9097  # should be same with servicecomb.rest.address to use web 
container
-
 servicecomb:
   service:
     application: demo-nacos
@@ -28,8 +24,6 @@ servicecomb:
     nacos:
       enabled: true
       serverAddr: ${PAAS_CSE_NACOS_ENDPOINT:http://127.0.0.1:8848}
-      serviceName: test-client
-      version: 0.0.1
 
   rest:
     address: 0.0.0.0:9097 # should be same with server.port to use web 
container
diff --git 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosConfiguration.java
 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosConfiguration.java
index fcdab47ae..e1cd555a9 100644
--- 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosConfiguration.java
+++ 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosConfiguration.java
@@ -17,6 +17,7 @@
 
 package org.apache.servicecomb.registry.nacos;
 
+import org.apache.servicecomb.config.DataCenterProperties;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Bean;
@@ -33,10 +34,12 @@ public class NacosConfiguration {
 
   @Bean
   public NacosRegistration nacosRegistration(
+      DataCenterProperties dataCenterProperties,
       @Qualifier("nacosDiscoveryProperties") NacosDiscoveryProperties 
nacosDiscoveryProperties,
-      @Qualifier("nacosDiscovery") NacosDiscovery nacosDiscovery, Environment 
environment,
+      Environment environment,
       @Qualifier("instancesChangeEventListener") InstancesChangeEventListener 
instancesChangeEventListener) {
-    return new NacosRegistration(nacosDiscoveryProperties, nacosDiscovery, 
environment, instancesChangeEventListener);
+    return new NacosRegistration(dataCenterProperties, 
nacosDiscoveryProperties, environment,
+        instancesChangeEventListener);
   }
 
   @Bean
diff --git 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosConst.java
 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosConst.java
index 08308f708..b3a7a5dab 100644
--- 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosConst.java
+++ 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosConst.java
@@ -18,6 +18,24 @@
 package org.apache.servicecomb.registry.nacos;
 
 public class NacosConst {
+  public static final String PROPERTY_VERSION = "scb-version";
+
+  public static final String PROPERTY_ALIAS = "scb-alias";
+
+  public static final String PROPERTY_DESCRIPTION = "scb-description";
+
+  public static final String PROPERTY_ENDPOINT = "scb-endpoint";
+
+  public static final String PROPERTY_REGION = "scb-region";
+
+  public static final String PROPERTY_ZONE = "scb-zone";
+
+  public static final String PROPERTY_DATACENTER = "scb-datacenter";
+
+  public static final String PROPERTY_SCHEMA_PREFIX = "scb-schema-";
+
+  public static final String ENDPOINT_PROPERTY_SEPARATOR = ",";
+
   public static final String NACOS_REGISTRY_PREFIX = 
"servicecomb.registry.nacos";
 
   public static final String SERVER_ADDR = "serverAddr";
@@ -39,6 +57,4 @@ public class NacosConst {
   public static final String NAMING_LOAD_CACHE_AT_START = 
"namingLoadCacheAtStart";
 
   public static final String NACOS_REGISTRY_NAME = "nacos-registry";
-
-  public static final String SCHEMA_PREFIX = "schema_";
 }
diff --git 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosDiscovery.java
 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosDiscovery.java
index 7330d69b7..a60634238 100644
--- 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosDiscovery.java
+++ 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosDiscovery.java
@@ -66,20 +66,20 @@ public class NacosDiscovery implements 
Discovery<NacosDiscoveryInstance> {
   @Override
   public List<NacosDiscoveryInstance> findServiceInstances(String application, 
String serviceName) {
     try {
-      List<Instance> instances = namingService.selectInstances(serviceName, 
application, true);
+      List<Instance> instances = namingService.getAllInstances(serviceName, 
application, true);
       return convertServiceInstanceList(instances, application);
     } catch (NacosException e) {
       throw new IllegalStateException("updateMicroserviceInstanceStatus 
process is interrupted.");
     }
   }
 
-  private List<NacosDiscoveryInstance> 
convertServiceInstanceList(List<Instance> isntances, String application) {
-    if (CollectionUtils.isEmpty(isntances)) {
+  private List<NacosDiscoveryInstance> 
convertServiceInstanceList(List<Instance> instances, String application) {
+    if (CollectionUtils.isEmpty(instances)) {
       return Collections.emptyList();
     }
     List<NacosDiscoveryInstance> result = new ArrayList<>();
-    for (Instance instance : isntances) {
-      result.add(new NacosDiscoveryInstance(instance, 
nacosDiscoveryProperties, application));
+    for (Instance instance : instances) {
+      result.add(new NacosDiscoveryInstance(instance, application, 
environment));
     }
     return result;
   }
@@ -96,7 +96,7 @@ public class NacosDiscovery implements 
Discovery<NacosDiscoveryInstance> {
 
   @Override
   public void init() {
-    namingService = 
NamingServiceManager.buildNamingService(nacosDiscoveryProperties);
+    namingService = NamingServiceManager.buildNamingService(environment, 
nacosDiscoveryProperties);
   }
 
   @Override
diff --git 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosDiscoveryInstance.java
 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosDiscoveryInstance.java
index 67970f531..bdcf70af2 100644
--- 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosDiscoveryInstance.java
+++ 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosDiscoveryInstance.java
@@ -17,32 +17,39 @@
 
 package org.apache.servicecomb.registry.nacos;
 
-import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.lang3.StringUtils;
+import org.apache.servicecomb.config.BootStrapProperties;
 import org.apache.servicecomb.registry.api.AbstractDiscoveryInstance;
 import org.apache.servicecomb.registry.api.DataCenterInfo;
 import org.apache.servicecomb.registry.api.MicroserviceInstanceStatus;
-import org.springframework.util.CollectionUtils;
+import org.springframework.core.env.Environment;
 
 import com.alibaba.nacos.api.naming.pojo.Instance;
 
 public class NacosDiscoveryInstance extends AbstractDiscoveryInstance {
-  private final NacosDiscoveryProperties nacosDiscoveryProperties;
-
   private final Instance instance;
 
-  private final Map<String, String> schemas = new HashMap<>();
+  private final String application;
+
+  private final Environment environment;
+
+  private final Map<String, String> schemas;
 
-  private String application;
+  private final List<String> endpoints;
 
-  public NacosDiscoveryInstance(Instance instance, NacosDiscoveryProperties 
nacosDiscoveryProperties,
-      String application) {
+  public NacosDiscoveryInstance(Instance instance, String application,
+      Environment environment) {
     this.instance = instance;
-    this.nacosDiscoveryProperties = nacosDiscoveryProperties;
+    this.environment = environment;
     this.application = application;
+    this.endpoints = readEndpoints(instance);
+    this.schemas = readSchemas(instance);
   }
 
   @Override
@@ -57,12 +64,12 @@ public class NacosDiscoveryInstance extends 
AbstractDiscoveryInstance {
 
   @Override
   public String getEnvironment() {
-    return nacosDiscoveryProperties.getNamespace();
+    return BootStrapProperties.readServiceEnvironment(environment);
   }
 
   @Override
   public String getApplication() {
-    return application;
+    return this.application;
   }
 
   @Override
@@ -72,25 +79,26 @@ public class NacosDiscoveryInstance extends 
AbstractDiscoveryInstance {
 
   @Override
   public String getAlias() {
-    return instance.getMetadata().get("alias");
+    return instance.getMetadata().get(NacosConst.PROPERTY_ALIAS);
   }
 
   @Override
   public String getVersion() {
-    return instance.getMetadata().get("version");
+    return instance.getMetadata().get(NacosConst.PROPERTY_VERSION);
   }
 
   @Override
   public DataCenterInfo getDataCenterInfo() {
     DataCenterInfo dataCenterInfo = new DataCenterInfo();
-    dataCenterInfo.setRegion(instance.getMetadata().get("region"));
-    dataCenterInfo.setAvailableZone(instance.getMetadata().get("zone"));
+    
dataCenterInfo.setRegion(instance.getMetadata().get(NacosConst.PROPERTY_REGION));
+    
dataCenterInfo.setAvailableZone(instance.getMetadata().get(NacosConst.PROPERTY_ZONE));
+    
dataCenterInfo.setName(instance.getMetadata().get(NacosConst.PROPERTY_DATACENTER));
     return dataCenterInfo;
   }
 
   @Override
   public String getDescription() {
-    return instance.getMetadata().get("description");
+    return instance.getMetadata().get(NacosConst.PROPERTY_DESCRIPTION);
   }
 
   @Override
@@ -100,31 +108,34 @@ public class NacosDiscoveryInstance extends 
AbstractDiscoveryInstance {
 
   @Override
   public Map<String, String> getSchemas() {
-    if (CollectionUtils.isEmpty(schemas)) {
-      Map<String, String> metaData = instance.getMetadata();
-      Map<String, String> instanceSchemas = new HashMap<>();
-      for (Map.Entry<String, String> entry: metaData.entrySet()) {
-        if (entry.getKey().startsWith(NacosConst.SCHEMA_PREFIX)) {
-          
instanceSchemas.put(entry.getKey().substring(NacosConst.SCHEMA_PREFIX.length()),
 entry.getValue());
-        }
+    return schemas;
+  }
+
+  private static Map<String, String> readSchemas(Instance instance) {
+    Map<String, String> metaData = instance.getMetadata();
+    Map<String, String> instanceSchemas = new HashMap<>();
+    for (Map.Entry<String, String> entry : metaData.entrySet()) {
+      if (entry.getKey().startsWith(NacosConst.PROPERTY_SCHEMA_PREFIX)) {
+        
instanceSchemas.put(entry.getKey().substring(NacosConst.PROPERTY_SCHEMA_PREFIX.length()),
+            entry.getValue());
       }
-      schemas.putAll(instanceSchemas);
     }
-    return schemas;
+    return instanceSchemas;
   }
 
   @Override
   public List<String> getEndpoints() {
-    List<String> endpoints = new ArrayList<>();
-    StringBuilder stringBuilder = new StringBuilder();
-    stringBuilder.append("rest://")
-      .append(instance.getIp())
-      .append(":")
-      .append(instance.getPort());
-    endpoints.add(stringBuilder.toString());
     return endpoints;
   }
 
+  private static List<String> readEndpoints(Instance instance) {
+    if 
(StringUtils.isEmpty(instance.getMetadata().get(NacosConst.PROPERTY_ENDPOINT))) 
{
+      return Collections.emptyList();
+    }
+    return 
Arrays.asList(instance.getMetadata().get(NacosConst.PROPERTY_ENDPOINT)
+        .split(NacosConst.ENDPOINT_PROPERTY_SEPARATOR));
+  }
+
   @Override
   public String getInstanceId() {
     return instance.getInstanceId();
diff --git 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosDiscoveryProperties.java
 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosDiscoveryProperties.java
index 50c49dc5a..5d27b7ec0 100644
--- 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosDiscoveryProperties.java
+++ 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosDiscoveryProperties.java
@@ -19,18 +19,12 @@ package org.apache.servicecomb.registry.nacos;
 
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Objects;
-import java.util.Properties;
 
 public class NacosDiscoveryProperties {
   private boolean enabled = true;
 
   private String serverAddr;
 
-  private String ip;
-
-  private String namespace;
-
   private Map<String, String> metadata = new HashMap<>();
 
   private boolean ephemeral = true;
@@ -53,8 +47,6 @@ public class NacosDiscoveryProperties {
 
   private String logName;
 
-  private boolean secure;
-
   public String getServerAddr() {
     return serverAddr;
   }
@@ -71,22 +63,6 @@ public class NacosDiscoveryProperties {
     this.enabled = enabled;
   }
 
-  public String getIp() {
-    return ip;
-  }
-
-  public void setIp(String ip) {
-    this.ip = ip;
-  }
-
-  public String getNamespace() {
-    return namespace;
-  }
-
-  public void setNamespace(String namespace) {
-    this.namespace = namespace;
-  }
-
   public Map<String, String> getMetadata() {
     return metadata;
   }
@@ -174,26 +150,4 @@ public class NacosDiscoveryProperties {
   public void setLogName(String logName) {
     this.logName = logName;
   }
-
-  public boolean isSecure() {
-    return secure;
-  }
-
-  public void setSecure(boolean secure) {
-    this.secure = secure;
-  }
-
-  public Properties getProperties() {
-    Properties properties = new Properties();
-    properties.put(NacosConst.SERVER_ADDR, this.serverAddr);
-    properties.put(NacosConst.USERNAME, Objects.toString(this.username, ""));
-    properties.put(NacosConst.PASSWORD, Objects.toString(this.password, ""));
-    properties.put(NacosConst.NAMESPACE, Objects.toString(this.namespace, ""));
-    properties.put(NacosConst.NACOS_NAMING_LOG_NAME, 
Objects.toString(this.logName, ""));
-    properties.put(NacosConst.ACCESS_KEY, Objects.toString(this.accessKey, 
""));
-    properties.put(NacosConst.SECRET_KEY, Objects.toString(this.secretKey, 
""));
-    properties.put(NacosConst.CLUSTER_NAME, this.clusterName);
-    properties.put(NacosConst.NAMING_LOAD_CACHE_AT_START, 
this.namingLoadCacheAtStart);
-    return properties;
-  }
 }
diff --git 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosMicroserviceHandler.java
 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosMicroserviceHandler.java
index 8f1e66ac1..c49b5cd69 100644
--- 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosMicroserviceHandler.java
+++ 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosMicroserviceHandler.java
@@ -17,7 +17,6 @@
 
 package org.apache.servicecomb.registry.nacos;
 
-import java.lang.management.ManagementFactory;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
@@ -26,7 +25,7 @@ import java.util.stream.Collectors;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.servicecomb.config.BootStrapProperties;
 import org.apache.servicecomb.config.ConfigUtil;
-import org.apache.servicecomb.foundation.common.net.NetUtils;
+import org.apache.servicecomb.config.DataCenterProperties;
 import org.springframework.core.env.Environment;
 
 import com.alibaba.nacos.api.naming.pojo.Instance;
@@ -46,38 +45,31 @@ public class NacosMicroserviceHandler {
 
   private static final String INSTANCE_PROPS = "SERVICECOMB_INSTANCE_PROPS";
 
-  public static Instance createMicroserviceInstance(NacosDiscoveryProperties 
properties, Environment environment) {
+  public static Instance createMicroserviceInstance(
+      DataCenterProperties dataCenterProperties, NacosDiscoveryProperties 
properties, Environment environment) {
     Instance instance = new Instance();
-    instance.setIp(StringUtils.isEmpty(properties.getIp()) ? 
NetUtils.getHostName() : properties.getIp());
-    instance.setPort(getEnvPort(environment));
-    instance.setInstanceId(buildInstanceId());
+    instance.setServiceName(BootStrapProperties.readServiceName(environment));
     instance.setWeight(properties.getWeight());
     instance.setEnabled(properties.isInstanceEnabled());
+    instance.setClusterName(properties.getClusterName());
+    instance.setEphemeral(properties.isEphemeral());
+
     Map<String, String> metadata = properties.getMetadata();
-    metadata.put("version", 
BootStrapProperties.readServiceVersion(environment));
-    metadata.put("alias", BootStrapProperties.readServiceAlias(environment));
-    metadata.put("description", 
BootStrapProperties.readServiceDescription(environment));
-    metadata.put("secure", String.valueOf(properties.isSecure()));
+    metadata.put(NacosConst.PROPERTY_VERSION, 
BootStrapProperties.readServiceVersion(environment));
+    metadata.put(NacosConst.PROPERTY_ALIAS, 
BootStrapProperties.readServiceAlias(environment));
+    metadata.put(NacosConst.PROPERTY_DESCRIPTION, 
BootStrapProperties.readServiceDescription(environment));
+    metadata.put(NacosConst.PROPERTY_DATACENTER, 
dataCenterProperties.getName());
+    metadata.put(NacosConst.PROPERTY_REGION, dataCenterProperties.getRegion());
+    metadata.put(NacosConst.PROPERTY_ZONE, 
dataCenterProperties.getAvailableZone());
     if (!StringUtils.isEmpty(environment.getProperty(VERSION_MAPPING)) &&
         
!StringUtils.isEmpty(environment.getProperty(environment.getProperty(VERSION_MAPPING))))
 {
       metadata.put("version", 
environment.getProperty(environment.getProperty(VERSION_MAPPING)));
     }
     metadata.putAll(genCasProperties(environment));
     instance.setMetadata(metadata);
-    instance.setClusterName(properties.getClusterName());
-    instance.setEphemeral(properties.isEphemeral());
-    instance.setServiceName(BootStrapProperties.readServiceName(environment));
     return instance;
   }
 
-  private static String buildInstanceId() {
-    return System.currentTimeMillis() + "-" + 
ManagementFactory.getRuntimeMXBean().getPid();
-  }
-
-  private static int getEnvPort(Environment environment) {
-    return Integer.parseInt(environment.getProperty("server.port"));
-  }
-
   private static Map<String, String> genCasProperties(Environment environment) 
{
     Map<String, String> properties = new HashMap<>();
     if (!StringUtils.isEmpty(environment.getProperty(CAS_APPLICATION_ID))) {
diff --git 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosRegistration.java
 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosRegistration.java
index 754a05f70..79cd58411 100644
--- 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosRegistration.java
+++ 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosRegistration.java
@@ -17,10 +17,14 @@
 
 package org.apache.servicecomb.registry.nacos;
 
+import java.lang.management.ManagementFactory;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.servicecomb.config.BootStrapProperties;
+import org.apache.servicecomb.config.DataCenterProperties;
+import org.apache.servicecomb.core.Endpoint;
+import org.apache.servicecomb.core.invocation.endpoint.EndpointUtils;
+import org.apache.servicecomb.foundation.common.net.URIEndpointObject;
 import org.apache.servicecomb.registry.api.MicroserviceInstanceStatus;
 import org.apache.servicecomb.registry.api.Registration;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,68 +40,88 @@ import com.alibaba.nacos.common.notify.NotifyCenter;
 public class NacosRegistration implements 
Registration<NacosRegistrationInstance> {
   private final NacosDiscoveryProperties nacosDiscoveryProperties;
 
-  private final NacosDiscovery nacosDiscovery;
-
   private final Environment environment;
 
   private final InstancesChangeEventListener instancesChangeEventListener;
 
-  private NacosRegistrationInstance nacosRegistrationInstance;
+  private final String instanceId;
 
-  private Instance instance;
+  private final DataCenterProperties dataCenterProperties;
 
-  private String serviceId;
+  private NacosRegistrationInstance nacosRegistrationInstance;
 
-  private String application;
+  private Instance instance;
 
   private NamingService namingService;
 
   private NamingMaintainService namingMaintainService;
 
   @Autowired
-  public NacosRegistration(NacosDiscoveryProperties nacosDiscoveryProperties, 
NacosDiscovery nacosDiscovery,
+  public NacosRegistration(DataCenterProperties dataCenterProperties, 
NacosDiscoveryProperties nacosDiscoveryProperties,
       Environment environment, InstancesChangeEventListener 
instancesChangeEventListener) {
+    this.instanceId = buildInstanceId();
+    this.dataCenterProperties = dataCenterProperties;
     this.nacosDiscoveryProperties = nacosDiscoveryProperties;
-    this.nacosDiscovery = nacosDiscovery;
     this.environment = environment;
     this.instancesChangeEventListener = instancesChangeEventListener;
   }
 
   @Override
   public void init() {
-    instance = 
NacosMicroserviceHandler.createMicroserviceInstance(nacosDiscoveryProperties, 
environment);
+    instance = 
NacosMicroserviceHandler.createMicroserviceInstance(dataCenterProperties, 
nacosDiscoveryProperties,
+        environment);
+    instance.setInstanceId(instanceId);
     nacosRegistrationInstance = new NacosRegistrationInstance(instance, 
nacosDiscoveryProperties,
         environment);
-    serviceId = BootStrapProperties.readServiceName(environment);
-    application = BootStrapProperties.readApplication(environment);
-    namingService = 
NamingServiceManager.buildNamingService(nacosDiscoveryProperties);
-    namingMaintainService = 
NamingServiceManager.buildNamingMaintainService(nacosDiscoveryProperties);
+
+    namingService = NamingServiceManager.buildNamingService(environment, 
nacosDiscoveryProperties);
+    namingMaintainService = 
NamingServiceManager.buildNamingMaintainService(environment, 
nacosDiscoveryProperties);
     NotifyCenter.registerSubscriber(instancesChangeEventListener);
   }
 
   @Override
   public void run() {
     try {
-      addSchemas(nacosRegistrationInstance.getSchemas(), 
instance.getMetadata());
-      namingService.registerInstance(serviceId, application, instance);
+      addSchemas(nacosRegistrationInstance.getSchemas(), instance);
+      addEndpoints(nacosRegistrationInstance.getEndpoints(), instance);
+      
namingService.registerInstance(nacosRegistrationInstance.getServiceName(),
+          nacosRegistrationInstance.getApplication(), instance);
     } catch (NacosException e) {
       throw new IllegalStateException("registry process is interrupted.");
     }
   }
 
-  private static void addSchemas(Map<String, String> schemas, Map<String, 
String> metadata) {
+  private static void addSchemas(Map<String, String> schemas, Instance 
instance) {
     if (CollectionUtils.isEmpty(schemas)) {
       return;
     }
     for (Map.Entry<String, String> entry : schemas.entrySet()) {
-      metadata.put(NacosConst.SCHEMA_PREFIX + entry.getKey(), 
entry.getValue());
+      instance.addMetadata(NacosConst.PROPERTY_SCHEMA_PREFIX + entry.getKey(), 
entry.getValue());
+    }
+  }
+
+  private static void addEndpoints(List<String> endpoints, Instance instance) {
+    if (endpoints.isEmpty()) {
+      return;
+    }
+
+    for (String endpoint : endpoints) {
+      Endpoint temp = EndpointUtils.parse(endpoint);
+      if (temp.getAddress() instanceof URIEndpointObject) {
+        instance.setIp(((URIEndpointObject) temp.getAddress()).getHostOrIp());
+        instance.setPort(((URIEndpointObject) temp.getAddress()).getPort());
+        break;
+      }
     }
+
+    instance.addMetadata(NacosConst.PROPERTY_ENDPOINT, 
String.join(NacosConst.ENDPOINT_PROPERTY_SEPARATOR, endpoints));
   }
 
   @Override
   public void destroy() {
     try {
-      namingService.deregisterInstance(serviceId, application, instance);
+      
namingService.deregisterInstance(nacosRegistrationInstance.getServiceName(),
+          nacosRegistrationInstance.getApplication(), instance);
     } catch (NacosException e) {
       throw new IllegalStateException("destroy process is interrupted.");
     }
@@ -116,15 +140,12 @@ public class NacosRegistration implements 
Registration<NacosRegistrationInstance
   @Override
   public boolean updateMicroserviceInstanceStatus(MicroserviceInstanceStatus 
status) {
     try {
-      List<NacosDiscoveryInstance> instances = 
nacosDiscovery.findServiceInstances(application, serviceId);
-      if (CollectionUtils.isEmpty(instances)) {
-        return false;
-      }
       instance.setEnabled(MicroserviceInstanceStatus.DOWN != status);
-      namingMaintainService.updateInstance(serviceId, application, instance);
+      
namingMaintainService.updateInstance(nacosRegistrationInstance.getServiceName(),
+          nacosRegistrationInstance.getApplication(), instance);
       return true;
     } catch (NacosException e) {
-      throw new IllegalStateException("updateMicroserviceInstanceStatus 
process is interrupted.");
+      throw new IllegalStateException(e);
     }
   }
 
@@ -140,11 +161,15 @@ public class NacosRegistration implements 
Registration<NacosRegistrationInstance
 
   @Override
   public void addProperty(String key, String value) {
-    instance.getMetadata().put(key, value);
+    instance.addMetadata(key, value);
   }
 
   @Override
   public boolean enabled() {
     return nacosDiscoveryProperties.isEnabled();
   }
+
+  private static String buildInstanceId() {
+    return System.currentTimeMillis() + "-" + 
ManagementFactory.getRuntimeMXBean().getPid();
+  }
 }
diff --git 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosRegistrationInstance.java
 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosRegistrationInstance.java
index 9bb3013c0..9b5cd3a16 100644
--- 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosRegistrationInstance.java
+++ 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NacosRegistrationInstance.java
@@ -50,7 +50,7 @@ public class NacosRegistrationInstance implements 
RegistrationInstance {
 
   @Override
   public String getEnvironment() {
-    return nacosDiscoveryProperties.getNamespace();
+    return BootStrapProperties.readServiceEnvironment(environment);
   }
 
   @Override
diff --git 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NamingServiceManager.java
 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NamingServiceManager.java
index 85b4d1677..2e68213b5 100644
--- 
a/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NamingServiceManager.java
+++ 
b/service-registry/registry-nacos/src/main/java/org/apache/servicecomb/registry/nacos/NamingServiceManager.java
@@ -18,6 +18,10 @@
 package org.apache.servicecomb.registry.nacos;
 
 import java.util.Objects;
+import java.util.Properties;
+
+import org.apache.servicecomb.config.BootStrapProperties;
+import org.springframework.core.env.Environment;
 
 import com.alibaba.nacos.api.exception.NacosException;
 import com.alibaba.nacos.api.naming.NamingMaintainService;
@@ -30,12 +34,12 @@ public class NamingServiceManager {
 
   private static volatile NamingMaintainService namingMaintainService;
 
-  public static NamingService buildNamingService(NacosDiscoveryProperties 
properties) {
+  public static NamingService buildNamingService(Environment environment, 
NacosDiscoveryProperties properties) {
     if (Objects.isNull(namingService)) {
       synchronized (NamingServiceManager.class) {
         if (Objects.isNull(namingService)) {
           try {
-            namingService = new NacosNamingService(properties.getProperties());
+            namingService = new NacosNamingService(getProperties(environment, 
properties));
           } catch (NacosException e) {
             throw new IllegalStateException("build namingService failed.");
           }
@@ -45,12 +49,13 @@ public class NamingServiceManager {
     return namingService;
   }
 
-  public static NamingMaintainService 
buildNamingMaintainService(NacosDiscoveryProperties properties) {
+  public static NamingMaintainService buildNamingMaintainService(Environment 
environment,
+      NacosDiscoveryProperties properties) {
     if (Objects.isNull(namingMaintainService)) {
       synchronized (NamingServiceManager.class) {
         if (Objects.isNull(namingMaintainService)) {
           try {
-            namingMaintainService = new 
NacosNamingMaintainService(properties.getProperties());
+            namingMaintainService = new 
NacosNamingMaintainService(getProperties(environment, properties));
           } catch (NacosException e) {
             throw new IllegalStateException("build namingMaintainService 
failed.");
           }
@@ -59,4 +64,19 @@ public class NamingServiceManager {
     }
     return namingMaintainService;
   }
+
+  private static Properties getProperties(Environment environment,
+      NacosDiscoveryProperties nacosDiscoveryProperties) {
+    Properties properties = new Properties();
+    properties.put(NacosConst.NAMESPACE, 
BootStrapProperties.readServiceEnvironment(environment));
+    properties.put(NacosConst.SERVER_ADDR, 
nacosDiscoveryProperties.getServerAddr());
+    properties.put(NacosConst.USERNAME, 
Objects.toString(nacosDiscoveryProperties.getUsername(), ""));
+    properties.put(NacosConst.PASSWORD, 
Objects.toString(nacosDiscoveryProperties.getPassword(), ""));
+    properties.put(NacosConst.NACOS_NAMING_LOG_NAME, 
Objects.toString(nacosDiscoveryProperties.getLogName(), ""));
+    properties.put(NacosConst.ACCESS_KEY, 
Objects.toString(nacosDiscoveryProperties.getAccessKey(), ""));
+    properties.put(NacosConst.SECRET_KEY, 
Objects.toString(nacosDiscoveryProperties.getSecretKey(), ""));
+    properties.put(NacosConst.CLUSTER_NAME, 
nacosDiscoveryProperties.getClusterName());
+    properties.put(NacosConst.NAMING_LOAD_CACHE_AT_START, 
nacosDiscoveryProperties.getNamingLoadCacheAtStart());
+    return properties;
+  }
 }


Reply via email to