This is an automated email from the ASF dual-hosted git repository. liujun pushed a commit to branch cloud-native in repository https://gitbox.apache.org/repos/asf/dubbo.git
commit 3707e1de5be96a7a53c778aced37f6cdc42c4868 Merge: f4d72ea edd37e3 Author: ken.lj <ken.lj...@gmail.com> AuthorDate: Tue Aug 27 09:23:47 2019 +0800 Merge remote-tracking branch 'origin/cloud-native' into cloud-native # Conflicts: # dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistry.java .../NacosDubboServiceConsumerBootstrap.java | 13 +--- .../registry/client/ServiceDiscoveryRegistry.java | 64 ++++++++++++--- .../RestProtocolSubscribedURLsSynthesizer.java | 91 ++++++++++++++++++++++ .../client/metadata/SubscribedURLsSynthesizer.java | 53 +++++++++++++ ...istry.client.metadata.SubscribedURLsSynthesizer | 1 + 5 files changed, 203 insertions(+), 19 deletions(-) diff --cc dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistry.java index 0cfa520,581e388..5368b56 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistry.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistry.java @@@ -345,12 -341,32 +354,32 @@@ public class ServiceDiscoveryRegistry e return; } - List<URL> subscribedURLs = getSubscribedURLs(subscribedURL, serviceInstances, serviceName); + List<URL> subscribedURLs = new LinkedList<>(); + + /** + * Add the exported URLs from {@link MetadataService} + */ - subscribedURLs.addAll(getExportedURLs(subscribedURL, serviceInstances)); ++ subscribedURLs.addAll(getExportedURLs(subscribedURL, serviceInstances, serviceName)); + + if (subscribedURLs.isEmpty()) { // If empty, try to synthesize + /** + * Add the subscribed URLs that were synthesized + */ + subscribedURLs.addAll(synthesizeSubscribedURLs(subscribedURL, serviceInstances)); + } listener.notify(subscribedURLs); } - private List<URL> getSubscribedURLs(URL subscribedURL, Collection<ServiceInstance> instances, String serviceName) { + /** + * Get the exported {@link URL URLs} from the {@link MetadataService} in the specified + * {@link ServiceInstance service instances} + * + * @param subscribedURL the subscribed {@link URL url} + * @param instances {@link ServiceInstance service instances} + * @return the exported {@link URL URLs} if present, or <code>{@link Collections#emptyList() empty list}</code> + */ - private List<URL> getExportedURLs(URL subscribedURL, Collection<ServiceInstance> instances) { ++ private List<URL> getExportedURLs(URL subscribedURL, Collection<ServiceInstance> instances, String serviceName) { // local service instances could be mutable List<ServiceInstance> serviceInstances = instances.stream() @@@ -683,13 -685,28 +712,28 @@@ return exportedURLs; } + /** + * Synthesize new subscribed {@link URL URLs} from old one + * + * @param subscribedURL + * @param serviceInstances + * @return non-null + */ + private Collection<? extends URL> synthesizeSubscribedURLs(URL subscribedURL, Collection<ServiceInstance> serviceInstances) { + return subscribedURLsSynthesizers.stream() + .filter(synthesizer -> synthesizer.supports(subscribedURL)) + .map(synthesizer -> synthesizer.synthesize(subscribedURL, serviceInstances)) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + } + - protected Set<String> getServices(URL subscribedURL) { - Set<String> serviceNames = getSubscribedServices(); - if (isEmpty(serviceNames)) { - serviceNames = findMappedServices(subscribedURL); + protected Map<String, String> getServices(URL subscribedURL) { + Map<String, String> services = getSubscribedServices(); + if (isEmptyMap(services)) { + services = findMappedServices(subscribedURL); } - return serviceNames; + return services; } /**