diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigProperties.java b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigProperties.java
index d19e8acf..c0e45492 100644
--- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigProperties.java
+++ b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigProperties.java
@@ -18,7 +18,6 @@ package org.springframework.cloud.alibaba.nacos;
import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.config.ConfigService;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySourceLocator.java b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySourceLocator.java
index 5ce9afea..7a665d2b 100644
--- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySourceLocator.java
+++ b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySourceLocator.java
@@ -183,19 +183,19 @@ public class NacosPropertySourceLocator implements PropertySourceLocator {
}
}
- private static void checkDataIdFileExtension(String[] sharedDataIdArry) {
+ private static void checkDataIdFileExtension(String[] dataIdArray) {
StringBuilder stringBuilder = new StringBuilder();
- for (int i = 0; i < sharedDataIdArry.length; i++) {
+ for (int i = 0; i < dataIdArray.length; i++) {
boolean isLegal = false;
for (String fileExtension : SUPPORT_FILE_EXTENSION) {
- if (sharedDataIdArry[i].indexOf(fileExtension) > 0) {
+ if (dataIdArray[i].indexOf(fileExtension) > 0) {
isLegal = true;
break;
}
}
// add tips
if (!isLegal) {
- stringBuilder.append(sharedDataIdArry[i] + ",");
+ stringBuilder.append(dataIdArray[i] + ",");
}
}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.java
index 6e087422..f53a0562 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.java
@@ -16,16 +16,23 @@
package org.springframework.cloud.alibaba.nacos;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnNotWebApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClientAutoConfiguration;
import org.springframework.cloud.alibaba.nacos.registry.NacosAutoServiceRegistration;
import org.springframework.cloud.alibaba.nacos.registry.NacosRegistration;
import org.springframework.cloud.alibaba.nacos.registry.NacosServiceRegistry;
-import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration;
+import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration;
import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationProperties;
+import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -38,19 +45,28 @@ import org.springframework.context.annotation.Configuration;
@ConditionalOnNacosDiscoveryEnabled
@ConditionalOnClass(name = "org.springframework.boot.context.embedded.EmbeddedServletContainerInitializedEvent")
@ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled", matchIfMissing = true)
-@AutoConfigureBefore({ AutoServiceRegistrationAutoConfiguration.class,
- NacosDiscoveryClientAutoConfiguration.class })
+@AutoConfigureBefore(NacosDiscoveryClientAutoConfiguration.class)
+@AutoConfigureAfter(AutoServiceRegistrationConfiguration.class)
public class NacosDiscoveryAutoConfiguration {
@Bean
- public NacosServiceRegistry nacosServiceRegistry() {
- return new NacosServiceRegistry();
+ @ConditionalOnMissingBean
+ public NacosDiscoveryProperties nacosProperties() {
+ return new NacosDiscoveryProperties();
+ }
+
+ @Bean
+ public NacosServiceRegistry nacosServiceRegistry(
+ NacosDiscoveryProperties nacosDiscoveryProperties) {
+ return new NacosServiceRegistry(nacosDiscoveryProperties);
}
@Bean
@ConditionalOnBean(AutoServiceRegistrationProperties.class)
- public NacosRegistration nacosRegistration() {
- return new NacosRegistration();
+ public NacosRegistration nacosRegistration(
+ NacosDiscoveryProperties nacosDiscoveryProperties,
+ ApplicationContext context) {
+ return new NacosRegistration(nacosDiscoveryProperties, context);
}
@Bean
@@ -62,4 +78,31 @@ public class NacosDiscoveryAutoConfiguration {
return new NacosAutoServiceRegistration(registry,
autoServiceRegistrationProperties, registration);
}
+
+ @Bean
+ @ConditionalOnBean(NacosAutoServiceRegistration.class) // NacosAutoServiceRegistration
+ // should be present
+ @ConditionalOnNotWebApplication // Not Web Application
+ public ApplicationRunner applicationRunner(
+ final NacosAutoServiceRegistration nacosAutoServiceRegistration) {
+
+ return new ApplicationRunner() {
+ @Override
+ public void run(ApplicationArguments args) throws Exception {
+ if (!nacosAutoServiceRegistration.isRunning()) { // If it's not running,
+ // let
+ // it start.
+ // FIXME: Please make sure "spring.cloud.nacos.discovery.port" must be
+ // configured on an available port,
+ // or the startup or Nacos health check will be failed.
+ nacosAutoServiceRegistration.start();
+ // NacosAutoServiceRegistration will be stopped after its destroy()
+ // method
+ // is invoked.
+ // @PreDestroy destroy() -> stop()
+ }
+ }
+ };
+ }
+
}
\ No newline at end of file
diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties.java
index 11fb1290..ecb0b136 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties.java
@@ -27,7 +27,6 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.commons.util.InetUtils;
import org.springframework.core.env.Environment;
import org.springframework.util.StringUtils;
-
import javax.annotation.PostConstruct;
import java.net.Inet4Address;
import java.net.InetAddress;
@@ -40,7 +39,7 @@ import static com.alibaba.nacos.api.PropertyKeyConst.*;
/**
* @author dungu.zpf
* @author xiaojing
- * @author pbting
+ * @author Mercy
*/
@ConfigurationProperties("spring.cloud.nacos.discovery")
@@ -65,6 +64,11 @@ public class NacosDiscoveryProperties {
*/
private String namespace;
+ /**
+ * watch delay,duration to pull new service from nacos server.
+ */
+ private long watchDelay = 5000;
+
/**
* nacos naming log file name
*/
@@ -145,7 +149,14 @@ public class NacosDiscoveryProperties {
@PostConstruct
public void init() throws SocketException {
+ if (secure) {
+ metadata.put("secure", "true");
+ }
+
serverAddr = Objects.toString(serverAddr, "");
+ if (serverAddr.lastIndexOf("/") != -1) {
+ serverAddr.substring(0, serverAddr.length() - 1);
+ }
endpoint = Objects.toString(endpoint, "");
namespace = Objects.toString(namespace, "");
logName = Objects.toString(logName, "");
@@ -158,7 +169,7 @@ public class NacosDiscoveryProperties {
else {
NetworkInterface netInterface = NetworkInterface
.getByName(networkInterface);
- if (null == networkInterface) {
+ if (null == netInterface) {
throw new IllegalArgumentException(
"no such interface " + networkInterface);
}
@@ -316,16 +327,25 @@ public class NacosDiscoveryProperties {
this.namingLoadCacheAtStart = namingLoadCacheAtStart;
}
+ public long getWatchDelay() {
+ return watchDelay;
+ }
+
+ public void setWatchDelay(long watchDelay) {
+ this.watchDelay = watchDelay;
+ }
+
@Override
public String toString() {
return "NacosDiscoveryProperties{" + "serverAddr='" + serverAddr + '\''
+ ", endpoint='" + endpoint + '\'' + ", namespace='" + namespace + '\''
- + ", logName='" + logName + '\'' + ", service='" + service + '\''
- + ", weight=" + weight + ", clusterName='" + clusterName + '\''
- + ", metadata=" + metadata + ", registerEnabled=" + registerEnabled
- + ", ip='" + ip + '\'' + ", networkInterface='" + networkInterface + '\''
- + ", port=" + port + ", secure=" + secure + ", accessKey='" + accessKey
- + ", namingLoadCacheAtStart=" + namingLoadCacheAtStart + '\''
+ + ", watchDelay=" + watchDelay + ", logName='" + logName + '\''
+ + ", service='" + service + '\'' + ", weight=" + weight
+ + ", clusterName='" + clusterName + '\'' + ", namingLoadCacheAtStart='"
+ + namingLoadCacheAtStart + '\'' + ", metadata=" + metadata
+ + ", registerEnabled=" + registerEnabled + ", ip='" + ip + '\''
+ + ", networkInterface='" + networkInterface + '\'' + ", port=" + port
+ + ", secure=" + secure + ", accessKey='" + accessKey + '\''
+ ", secretKey='" + secretKey + '\'' + '}';
}
@@ -353,7 +373,7 @@ public class NacosDiscoveryProperties {
}
if (StringUtils.isEmpty(this.getClusterName())) {
this.setClusterName(env.resolvePlaceholders(
- "${spring.cloud.nacos.discovery.clusterName-name:}"));
+ "${spring.cloud.nacos.discovery.cluster-name:}"));
}
if (StringUtils.isEmpty(this.getEndpoint())) {
this.setEndpoint(
@@ -379,12 +399,12 @@ public class NacosDiscoveryProperties {
try {
namingService = NacosFactory.createNamingService(properties);
- return namingService;
}
catch (Exception e) {
LOGGER.error("create naming service error!properties={},e=,", this, e);
return null;
}
+ return namingService;
}
}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryClient.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClient.java
similarity index 85%
rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryClient.java
rename to spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClient.java
index eedc2ffe..1bc25ea5 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryClient.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClient.java
@@ -14,13 +14,14 @@
* limitations under the License.
*/
-package org.springframework.cloud.alibaba.nacos;
+package org.springframework.cloud.alibaba.nacos.discovery;
import com.alibaba.nacos.api.naming.pojo.Instance;
import com.alibaba.nacos.api.naming.pojo.ListView;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties;
+import org.springframework.cloud.alibaba.nacos.NacosServiceInstance;
import org.springframework.cloud.client.DefaultServiceInstance;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
@@ -30,7 +31,6 @@ import java.util.*;
/**
* @author xiaojing
* @author renhaojun
- * @author pbting
*/
public class NacosDiscoveryClient implements DiscoveryClient {
@@ -38,9 +38,12 @@ public class NacosDiscoveryClient implements DiscoveryClient {
.getLogger(NacosDiscoveryClient.class);
public static final String DESCRIPTION = "Spring Cloud Nacos Discovery Client";
- @Autowired
private NacosDiscoveryProperties discoveryProperties;
+ public NacosDiscoveryClient(NacosDiscoveryProperties discoveryProperties) {
+ this.discoveryProperties = discoveryProperties;
+ }
+
@Override
public String description() {
return DESCRIPTION;
@@ -75,19 +78,24 @@ public class NacosDiscoveryClient implements DiscoveryClient {
nacosServiceInstance.setHost(instance.getIp());
nacosServiceInstance.setPort(instance.getPort());
nacosServiceInstance.setServiceId(serviceId);
- Map metadata = new HashMap();
+ Map metadata = new HashMap<>();
metadata.put("instanceId", instance.getInstanceId());
metadata.put("weight", instance.getWeight() + "");
metadata.put("healthy", instance.isHealthy() + "");
metadata.put("cluster", instance.getClusterName() + "");
metadata.putAll(instance.getMetadata());
nacosServiceInstance.setMetadata(metadata);
+
+ if (metadata.containsKey("secure")) {
+ boolean secure = Boolean.parseBoolean(metadata.get("secure"));
+ nacosServiceInstance.setSecure(secure);
+ }
return nacosServiceInstance;
}
private static List hostToServiceInstanceList(
List instances, String serviceId) {
- List result = new ArrayList(instances.size());
+ List result = new ArrayList<>(instances.size());
for (Instance instance : instances) {
result.add(hostToServiceInstance(instance, serviceId));
}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryClientAutoConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClientAutoConfiguration.java
similarity index 58%
rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryClientAutoConfiguration.java
rename to spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClientAutoConfiguration.java
index 05049f4b..5fe818b3 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryClientAutoConfiguration.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClientAutoConfiguration.java
@@ -14,11 +14,16 @@
* limitations under the License.
*/
-package org.springframework.cloud.alibaba.nacos;
+package org.springframework.cloud.alibaba.nacos.discovery;
+import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.cloud.alibaba.nacos.ConditionalOnNacosDiscoveryEnabled;
+import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties;
+import org.springframework.cloud.client.CommonsClientAutoConfiguration;
import org.springframework.cloud.client.discovery.DiscoveryClient;
+import org.springframework.cloud.client.discovery.simple.SimpleDiscoveryClientAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -26,20 +31,21 @@ import org.springframework.context.annotation.Configuration;
* @author xiaojing
*/
@Configuration
-@ConditionalOnMissingBean(DiscoveryClient.class)
@ConditionalOnNacosDiscoveryEnabled
@EnableConfigurationProperties
+@AutoConfigureBefore({ SimpleDiscoveryClientAutoConfiguration.class,
+ CommonsClientAutoConfiguration.class })
public class NacosDiscoveryClientAutoConfiguration {
@Bean
- public DiscoveryClient nacosDiscoveryClient() {
- return new NacosDiscoveryClient();
+ public DiscoveryClient nacosDiscoveryClient(
+ NacosDiscoveryProperties discoveryProperties) {
+ return new NacosDiscoveryClient(discoveryProperties);
}
@Bean
@ConditionalOnMissingBean
- public NacosDiscoveryProperties nacosProperties() {
- return new NacosDiscoveryProperties();
+ public NacosWatch nacosWatch(NacosDiscoveryProperties nacosDiscoveryProperties) {
+ return new NacosWatch(nacosDiscoveryProperties);
}
-
}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosWatch.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosWatch.java
new file mode 100644
index 00000000..05e92fbc
--- /dev/null
+++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosWatch.java
@@ -0,0 +1,183 @@
+/*
+ * Copyright (C) 2019 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.cloud.alibaba.nacos.discovery;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicLong;
+
+import com.alibaba.nacos.api.naming.NamingService;
+import com.alibaba.nacos.api.naming.listener.Event;
+import com.alibaba.nacos.api.naming.listener.EventListener;
+import com.alibaba.nacos.api.naming.pojo.ListView;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties;
+import org.springframework.cloud.client.discovery.event.HeartbeatEvent;
+import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.context.ApplicationEventPublisherAware;
+import org.springframework.context.SmartLifecycle;
+import org.springframework.scheduling.TaskScheduler;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+
+/**
+ * @author xiaojing
+ */
+public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycle {
+
+ private static final Logger log = LoggerFactory.getLogger(NacosWatch.class);
+
+ private final NacosDiscoveryProperties properties;
+
+ private final TaskScheduler taskScheduler;
+
+ private final AtomicLong nacosWatchIndex = new AtomicLong(0);
+
+ private final AtomicBoolean running = new AtomicBoolean(false);
+
+ private ApplicationEventPublisher publisher;
+
+ private ScheduledFuture> watchFuture;
+
+ private Set cacheServices = new HashSet<>();
+
+ private HashMap subscribeListeners = new HashMap<>();
+
+ public NacosWatch(NacosDiscoveryProperties properties) {
+ this(properties, getTaskScheduler());
+ }
+
+ public NacosWatch(NacosDiscoveryProperties properties, TaskScheduler taskScheduler) {
+ this.properties = properties;
+ this.taskScheduler = taskScheduler;
+ }
+
+ private static ThreadPoolTaskScheduler getTaskScheduler() {
+ ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
+ taskScheduler.initialize();
+ return taskScheduler;
+ }
+
+ @Override
+ public void setApplicationEventPublisher(ApplicationEventPublisher publisher) {
+ this.publisher = publisher;
+ }
+
+ @Override
+ public boolean isAutoStartup() {
+ return true;
+ }
+
+ @Override
+ public void stop(Runnable callback) {
+ this.stop();
+ callback.run();
+ }
+
+ @Override
+ public void start() {
+ if (this.running.compareAndSet(false, true)) {
+ this.watchFuture = this.taskScheduler.scheduleWithFixedDelay(new Runnable() {
+ @Override
+ public void run() {
+ NacosWatch.this.nacosServicesWatch();
+ }
+ }, this.properties.getWatchDelay());
+ }
+ }
+
+ @Override
+ public void stop() {
+ if (this.running.compareAndSet(true, false) && this.watchFuture != null) {
+ this.watchFuture.cancel(true);
+ }
+ }
+
+ @Override
+ public boolean isRunning() {
+ return false;
+ }
+
+ @Override
+ public int getPhase() {
+ return 0;
+ }
+
+ public void nacosServicesWatch() {
+ try {
+
+ boolean changed = false;
+ NamingService namingService = properties.namingServiceInstance();
+
+ ListView listView = properties.namingServiceInstance()
+ .getServicesOfServer(1, Integer.MAX_VALUE);
+
+ List serviceList = listView.getData();
+
+ // if there are new services found, publish event
+ Set currentServices = new HashSet<>(serviceList);
+ currentServices.removeAll(cacheServices);
+ if (currentServices.size() > 0) {
+ changed = true;
+ }
+
+ // if some services disappear, publish event
+ if (cacheServices.removeAll(new HashSet<>(serviceList))
+ && cacheServices.size() > 0) {
+ changed = true;
+
+ for (String serviceName : cacheServices) {
+ namingService.unsubscribe(serviceName,
+ subscribeListeners.get(serviceName));
+ subscribeListeners.remove(serviceName);
+ }
+ }
+
+ cacheServices = new HashSet<>(serviceList);
+
+ // subscribe services's node change, publish event if nodes changed
+ for (String serviceName : cacheServices) {
+ if (!subscribeListeners.containsKey(serviceName)) {
+ EventListener eventListener = new EventListener() {
+ @Override
+ public void onEvent(Event event) {
+ NacosWatch.this.publisher.publishEvent(new HeartbeatEvent(
+ NacosWatch.this, nacosWatchIndex.getAndIncrement()));
+ }
+ };
+ subscribeListeners.put(serviceName, eventListener);
+ namingService.subscribe(serviceName, eventListener);
+
+ }
+ }
+
+ if (changed) {
+ this.publisher.publishEvent(
+ new HeartbeatEvent(this, nacosWatchIndex.getAndIncrement()));
+ }
+
+ }
+ catch (Exception e) {
+ log.error("Error watching Nacos Service change", e);
+ }
+ }
+}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosDiscoveryEndpoint.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosDiscoveryEndpoint.java
index ef29eae1..be0907c6 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosDiscoveryEndpoint.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosDiscoveryEndpoint.java
@@ -26,7 +26,6 @@ import com.alibaba.nacos.api.naming.pojo.ServiceInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.endpoint.AbstractEndpoint;
import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties;
@@ -39,11 +38,11 @@ public class NacosDiscoveryEndpoint extends AbstractEndpoint