From 0485c6d06d9ce0b7aaaa9f5cc90b97ffd62e78e5 Mon Sep 17 00:00:00 2001 From: liuchunguang Date: Thu, 26 Mar 2020 09:33:28 +0800 Subject: [PATCH] fix #1259 #1260 #753 checkStyle --- .../DubboServiceMetadataRepository.java | 66 +++++++------------ .../registry/AbstractSpringCloudRegistry.java | 26 +++++--- 2 files changed, 40 insertions(+), 52 deletions(-) diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/repository/DubboServiceMetadataRepository.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/repository/DubboServiceMetadataRepository.java index d560f008..fc5c0c29 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/repository/DubboServiceMetadataRepository.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/repository/DubboServiceMetadataRepository.java @@ -278,8 +278,7 @@ public class DubboServiceMetadataRepository serviceName); } - - if (initSubscribedDubboMetadataService(serviceName)){ + if (initSubscribedDubboMetadataService(serviceName)) { // mark this service name having been initialized initializedServices.add(serviceName); } @@ -297,9 +296,9 @@ public class DubboServiceMetadataRepository synchronized (monitor) { initializedServices.remove(serviceName); dubboRestServiceMetadataRepository.remove(serviceName); - // fix #1260 if the subscribedDubboMetadataServiceURLs removed fail,old meta information will be retained - if( DubboMetadataService.class - .getName().equals(url.getServiceInterface() )) { + // fix #1260 if the subscribedDubboMetadataServiceURLs removed fail,old meta + // information will be retained + if (DubboMetadataService.class.getName().equals(url.getServiceInterface())) { String serviceKey = url.getServiceKey(); subscribedDubboMetadataServiceURLs.remove(serviceKey); } @@ -613,30 +612,34 @@ public class DubboServiceMetadataRepository } protected Boolean initSubscribedDubboMetadataService(String serviceName) { - // this need to judge whether the initialization is successful or not. The failed initialization will not change the initializedServices - Optional optionalServiceInstance = metadataServiceInstanceSelector.choose(discoveryClient.getInstances(serviceName)); - if(!optionalServiceInstance.isPresent() ){ + // this need to judge whether the initialization is successful or not. The failed + // initialization will not change the initializedServices + Optional optionalServiceInstance = metadataServiceInstanceSelector + .choose(discoveryClient.getInstances(serviceName)); + if (!optionalServiceInstance.isPresent()) { return false; } ServiceInstance serviceInstance = optionalServiceInstance.get(); - if(null == serviceInstance ){ + if (null == serviceInstance) { return false; } List dubboMetadataServiceURLs = getDubboMetadataServiceURLs(serviceInstance); - if(dubboMetadataServiceURLs.isEmpty()){ + if (dubboMetadataServiceURLs.isEmpty()) { return false; } - for(URL dubboMetadataServiceURL : dubboMetadataServiceURLs){ + for (URL dubboMetadataServiceURL : dubboMetadataServiceURLs) { try { - initSubscribedDubboMetadataServiceURL( - dubboMetadataServiceURL); - DubboMetadataService dubboMetadataService = dubboMetadataConfigServiceProxy.getProxy(serviceName); - if(dubboMetadataService == null){ - dubboMetadataService = initDubboMetadataServiceProxy(dubboMetadataServiceURL); + initSubscribedDubboMetadataServiceURL(dubboMetadataServiceURL); + DubboMetadataService dubboMetadataService = dubboMetadataConfigServiceProxy + .getProxy(serviceName); + if (dubboMetadataService == null) { + dubboMetadataService = initDubboMetadataServiceProxy( + dubboMetadataServiceURL); } - if(dubboMetadataService == null){ - removeMetadataAndInitializedService(serviceName, dubboMetadataServiceURL); + if (dubboMetadataService == null) { + removeMetadataAndInitializedService(serviceName, + dubboMetadataServiceURL); return false; } } @@ -646,30 +649,6 @@ public class DubboServiceMetadataRepository } } } - /*metadataServiceInstanceSelector.choose(discoveryClient.getInstances(serviceName)) - .map(this::getDubboMetadataServiceURLs) - .ifPresent(dubboMetadataServiceURLs -> { - if( dubboMetadataServiceURLs.isEmpty()){ - initializedServices.remove(serviceName); - }else{ - dubboMetadataServiceURLs.forEach(dubboMetadataServiceURL -> { - try { - initSubscribedDubboMetadataServiceURL( - dubboMetadataServiceURL); - DubboMetadataService dubboMetadataService = initDubboMetadataServiceProxy(dubboMetadataServiceURL); - if(dubboMetadataService == null){ - initializedServices.remove(serviceName); - } - } - catch (Throwable e) { - if (logger.isErrorEnabled()) { - logger.error(e.getMessage(), e); - } - } - }); - } - - });*/ initDubboRestServiceMetadataRepository(serviceName); return true; } @@ -680,7 +659,8 @@ public class DubboServiceMetadataRepository subscribedDubboMetadataServiceURLs.add(serviceKey, dubboMetadataServiceURL); } - private DubboMetadataService initDubboMetadataServiceProxy(URL dubboMetadataServiceURL) { + private DubboMetadataService initDubboMetadataServiceProxy( + URL dubboMetadataServiceURL) { String serviceName = dubboMetadataServiceURL.getParameter(APPLICATION_KEY); String version = dubboMetadataServiceURL.getParameter(VERSION_KEY); // Initialize DubboMetadataService with right version diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/AbstractSpringCloudRegistry.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/AbstractSpringCloudRegistry.java index a5f8ab8e..8fe31778 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/AbstractSpringCloudRegistry.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/AbstractSpringCloudRegistry.java @@ -153,8 +153,10 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { } else if (isDubboMetadataServiceURL(url)) { // for DubboMetadataService subscribeDubboMetadataServiceURLs(url, listener); - if( from(url).getParameter(CATEGORY_KEY) != null && from(url).getParameter(CATEGORY_KEY).contains(PROVIDER)){ - // Fix #1259 and #753 Listene meta service change events to remove useless clients + if (from(url).getParameter(CATEGORY_KEY) != null + && from(url).getParameter(CATEGORY_KEY).contains(PROVIDER)) { + // Fix #1259 and #753 Listene meta service change events to remove useless + // clients registerServiceInstancesChangedEventListener(url, listener); } @@ -225,7 +227,9 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { // Re-obtain the latest list of available metadata address here, ip or port may // change. // by https://github.com/wangzihaogithub - // When the last service provider is closed, 【fix 1259】while close the channel,when up a new provider then repository.initializeMetadata(serviceName) will throw Exception. + // When the last service provider is closed, 【fix 1259】while close the + // channel,when up a new provider then repository.initializeMetadata(serviceName) + // will throw Exception. // dubboMetadataConfigServiceProxy.removeProxy(serviceName); // repository.removeMetadataAndInitializedService(serviceName); // dubboGenericServiceFactory.destroy(serviceName); @@ -237,13 +241,15 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { + "available , please make sure the further impact", serviceName, url.getServiceKey()); } - if(isDubboMetadataServiceURL(url)){ - // if meta service change, and serviceInstances is zero, will clean up information about this client + if (isDubboMetadataServiceURL(url)) { + // if meta service change, and serviceInstances is zero, will clean up + // information about this client dubboMetadataConfigServiceProxy.removeProxy(serviceName); repository.removeMetadataAndInitializedService(serviceName, url); dubboGenericServiceFactory.destroy(serviceName); String listenerId = generateId(url); - // The metaservice will restart the new listener. It needs to be optimized to see whether the original listener can be reused. + // The metaservice will restart the new listener. It needs to be optimized + // to see whether the original listener can be reused. this.registerListeners.remove(listenerId); } @@ -258,7 +264,7 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { listener.notify(allSubscribedURLs); return; } - if( isDubboMetadataServiceURL(url) ){ + if (isDubboMetadataServiceURL(url)) { // Prevent duplicate generation of DubboMetadataService return; } @@ -314,9 +320,11 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { } private List emptyURLs(URL url) { - // issue : When the last service provider is closed, the client still periodically connects to the last provider.n + // issue : When the last service provider is closed, the client still periodically + // connects to the last provider.n // fix https://github.com/alibaba/spring-cloud-alibaba/issues/1259 - return asList(from(url).setProtocol(EMPTY_PROTOCOL).removeParameter(CATEGORY_KEY).build()); + return asList(from(url).setProtocol(EMPTY_PROTOCOL).removeParameter(CATEGORY_KEY) + .build()); } private List getServiceInstances(String serviceName) {