diff --git a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpointAutoConfiguration.java b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpointAutoConfiguration.java index 34decf74..9adf90e4 100644 --- a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpointAutoConfiguration.java +++ b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpointAutoConfiguration.java @@ -51,6 +51,8 @@ public class NacosConfigEndpointAutoConfiguration { } @Bean + @ConditionalOnMissingBean + @ConditionalOnProperty(name = "spring.cloud.nacos.config.health.enabled", matchIfMissing = true) public NacosConfigHealthIndicator nacosConfigHealthIndicator() { return new NacosConfigHealthIndicator(nacosConfigManager.getConfigService()); } diff --git a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 987acd5c..1b63cf27 100644 --- a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -40,7 +40,6 @@ "type": "java.util.List", "description": "a set of shared configurations .e.g: spring.cloud.nacos.config.shared-configs[0]=xxx ." }, - { "name": "spring.cloud.nacos.config.refreshable-dataids", "type": "java.lang.String", @@ -56,6 +55,12 @@ "type": "java.util.List", "description": "a set of extensional configurations .e.g: spring.cloud.nacos.config.extension-configs[0]=xxx ." }, + { + "name": "spring.cloud.nacos.config.health.enabled", + "type": "java.lang.Boolean", + "defaultValue": true, + "description": "the switch for health check, it default enabled(true)." + }, { "name": "spring.cloud.nacos.config.refresh-enabled", "type": "java.lang.Boolean", diff --git a/spring-cloud-starter-alibaba/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/AbstractSpringCloudRegistry.java b/spring-cloud-starter-alibaba/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/AbstractSpringCloudRegistry.java index 2ba34d0a..998ff6cd 100644 --- a/spring-cloud-starter-alibaba/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/AbstractSpringCloudRegistry.java +++ b/spring-cloud-starter-alibaba/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/AbstractSpringCloudRegistry.java @@ -222,10 +222,15 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { Collection serviceInstances = serviceInstancesFunction .apply(serviceName); + // issue : ReStarting a consumer and then starting a provider does not automatically discover the registration + // fix https://github.com/alibaba/spring-cloud-alibaba/issues/753 + // Re-obtain the latest list of available metadata address here, ip or port may change. + // by https://github.com/wangzihaogithub + dubboMetadataConfigServiceProxy.removeProxy(serviceName); + repository.removeMetadataAndInitializedService(serviceName); + dubboGenericServiceFactory.destroy(serviceName); + repository.initializeMetadata(serviceName); if (CollectionUtils.isEmpty(serviceInstances)) { - dubboMetadataConfigServiceProxy.removeProxy(serviceName); - repository.removeMetadataAndInitializedService(serviceName); - dubboGenericServiceFactory.destroy(serviceName); if (logger.isWarnEnabled()) { logger.warn( "There is no instance from service[name : {}], and then Dubbo Service[key : {}] will not be " @@ -246,18 +251,6 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { DubboMetadataService dubboMetadataService = dubboMetadataConfigServiceProxy .getProxy(serviceName); - - if (dubboMetadataService == null) { // If not found, try to initialize - if (logger.isInfoEnabled()) { - logger.info( - "The metadata of Dubbo service[key : {}] can't be found when the subscribed service[name : {}], " - + "and then try to initialize it", - url.getServiceKey(), serviceName); - } - repository.initializeMetadata(serviceName); - dubboMetadataService = dubboMetadataConfigServiceProxy.getProxy(serviceName); - } - if (dubboMetadataService == null) { // It makes sure not-found, return immediately if (logger.isWarnEnabled()) { logger.warn( @@ -269,7 +262,6 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { } List exportedURLs = getExportedURLs(dubboMetadataService, url); - for (URL exportedURL : exportedURLs) { String protocol = exportedURL.getProtocol(); List subscribedURLs = new LinkedList<>();