From 8c13863fb8c182a6268f4a8e7a04aeede2be5768 Mon Sep 17 00:00:00 2001 From: wangzihaogithub <842156727@qq.com> Date: Wed, 18 Mar 2020 12:11:21 +0800 Subject: [PATCH 1/2] [fix #753] https://github.com/alibaba/spring-cloud-alibaba/issues/753 --- .../registry/AbstractSpringCloudRegistry.java | 20 ++++--------------- 1 file changed, 4 insertions(+), 16 deletions(-) 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..29e9c53b 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,11 @@ 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 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 +247,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 +258,6 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { } List exportedURLs = getExportedURLs(dubboMetadataService, url); - for (URL exportedURL : exportedURLs) { String protocol = exportedURL.getProtocol(); List subscribedURLs = new LinkedList<>(); From a32d4f9767d07cbb11b8d5a6c361444706eda49b Mon Sep 17 00:00:00 2001 From: wangzihaogithub <842156727@qq.com> Date: Wed, 18 Mar 2020 12:17:58 +0800 Subject: [PATCH 2/2] [fix #753] https://github.com/alibaba/spring-cloud-alibaba/issues/753 --- .../cloud/dubbo/registry/AbstractSpringCloudRegistry.java | 4 ++++ 1 file changed, 4 insertions(+) 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 29e9c53b..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 @@ -226,6 +226,10 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { // 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)) { if (logger.isWarnEnabled()) { logger.warn(