diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceDiscoveryAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceDiscoveryAutoConfiguration.java index 6aa9bccd..8c331592 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceDiscoveryAutoConfiguration.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceDiscoveryAutoConfiguration.java @@ -21,6 +21,7 @@ import org.apache.dubbo.registry.NotifyListener; import com.alibaba.cloud.dubbo.env.DubboCloudProperties; import com.alibaba.cloud.dubbo.metadata.repository.DubboServiceMetadataRepository; +import com.alibaba.cloud.dubbo.registry.AbstractSpringCloudRegistry; import com.alibaba.cloud.dubbo.registry.event.ServiceInstancesChangedEvent; import com.alibaba.cloud.nacos.NacosDiscoveryProperties; import com.alibaba.cloud.nacos.discovery.NacosWatch; @@ -142,6 +143,10 @@ public class DubboServiceDiscoveryAutoConfiguration { return; } ServiceInstancesChangedEvent event = new ServiceInstancesChangedEvent(serviceName, serviceInstances); + if (logger.isInfoEnabled()) { + logger.info("The event of the service instances[name : {} , size : {}] change is about to be dispatched", + serviceName, serviceInstances.size()); + } applicationEventPublisher.publishEvent(event); } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/AbstractSpringCloudRegistry.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/AbstractSpringCloudRegistry.java index e2c06570..615f9d44 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/AbstractSpringCloudRegistry.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/AbstractSpringCloudRegistry.java @@ -174,24 +174,14 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { * @param listener {@link NotifyListener} */ private void registerServiceInstancesChangedEventListener(URL url, NotifyListener listener) { - String listenerId = url.toIdentityString(); + String listenerId = generateId(url); if (registerListeners.add(listenerId)) { applicationContext.addApplicationListener(new ApplicationListener() { @Override public void onApplicationEvent(ServiceInstancesChangedEvent event) { - if (event.isProcessed()) { // If processed, return immediately - return; - } - String serviceName = event.getServiceName(); Collection serviceInstances = event.getServiceInstances(); - if (logger.isInfoEnabled()) { - logger.info("The event of the service instances[name : {} , size: {}] change has been arrived", - serviceName, serviceInstances.size()); - } - subscribeDubboServiceURLs(url, listener, serviceName, s -> serviceInstances); - // Mark event to be processed - event.processed(); + subscribeDubboServiceURL(url, listener, serviceName, s -> serviceInstances); } }); } @@ -201,11 +191,16 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { Set subscribedServices = repository.getSubscribedServices(); // Sync - subscribedServices.forEach(service -> subscribeDubboServiceURLs(url, listener, service, this::getServiceInstances)); + subscribedServices.forEach(service -> subscribeDubboServiceURL(url, listener, service, this::getServiceInstances)); } - protected void subscribeDubboServiceURLs(URL url, NotifyListener listener, String serviceName, - Function> serviceInstancesFunction) { + protected void subscribeDubboServiceURL(URL url, NotifyListener listener, String serviceName, + Function> serviceInstancesFunction) { + + if (logger.isInfoEnabled()) { + logger.info("The Dubbo Service URL[ID : {}] is being subscribed for service[name : {}]", + generateId(url), serviceName); + } DubboMetadataService dubboMetadataService = dubboMetadataConfigServiceProxy.getProxy(serviceName); @@ -231,6 +226,10 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { List allSubscribedURLs = new LinkedList<>(); if (CollectionUtils.isEmpty(serviceInstances)) { + if (logger.isWarnEnabled()) { + logger.warn("There is no instance from service[name : {}], and then Dubbo Service[key : {}] will not be " + + "available , please make sure the further impact", serviceName, url.getServiceKey()); + } /** * URLs with {@link RegistryConstants#EMPTY_PROTOCOL} */ @@ -255,17 +254,21 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { } }); - if (logger.isDebugEnabled()) { - logger.debug("The subscribed URL[{}] will notify all URLs : {}", url, subscribedURLs); - } - allSubscribedURLs.addAll(subscribedURLs); } } + if (logger.isDebugEnabled()) { + logger.debug("The subscribed URL[{}] will notify all URLs : {}", url, allSubscribedURLs); + } + listener.notify(allSubscribedURLs); } + private String generateId(URL url) { + return url.toString(VERSION_KEY, GROUP_KEY, PROTOCOL_KEY); + } + private List emptyURLs(URL url) { return asList(from(url).setProtocol(EMPTY_PROTOCOL).build()); }