This is an automated email from the ASF dual-hosted git repository. liujun pushed a commit to branch 3.0 in repository https://gitbox.apache.org/repos/asf/dubbo.git
commit 0f53367da09aa76720694cf17f5567eddc093266 Author: ken.lj <[email protected]> AuthorDate: Mon Jul 27 16:13:55 2020 +0800 add side key to MetadataService --- .../client/ServiceDiscoveryRegistryDirectory.java | 18 +++++++++++++++++- .../metadata/StandardMetadataServiceURLBuilder.java | 5 ++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistryDirectory.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistryDirectory.java index 9c725ac..f65a927 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistryDirectory.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistryDirectory.java @@ -44,7 +44,7 @@ import static org.apache.dubbo.common.constants.RegistryConstants.EMPTY_PROTOCOL public class ServiceDiscoveryRegistryDirectory<T> extends DynamicDirectory<T> implements NotifyListener { private static final Logger logger = LoggerFactory.getLogger(ServiceDiscoveryRegistryDirectory.class); - // Map<url, Invoker> cache service url to invoker mapping. + // instance address to invoker mapping. private volatile Map<String, Invoker<T>> urlInvokerMap; // The initial value is null and the midway may be assigned to null, please use the local variable reference private ServiceInstancesChangedListener listener; @@ -54,6 +54,22 @@ public class ServiceDiscoveryRegistryDirectory<T> extends DynamicDirectory<T> im } @Override + public boolean isAvailable() { + if (isDestroyed()) { + return false; + } + Map<String, Invoker<T>> localUrlInvokerMap = urlInvokerMap; + if (localUrlInvokerMap != null && localUrlInvokerMap.size() > 0) { + for (Invoker<T> invoker : new ArrayList<>(localUrlInvokerMap.values())) { + if (invoker.isAvailable()) { + return true; + } + } + } + return false; + } + + @Override public synchronized void notify(List<URL> instanceUrls) { // Set the context of the address notification thread. RpcContext.setRpcContext(getConsumerUrl()); diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java index a542012..c90eea0 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java @@ -27,8 +27,10 @@ import java.util.List; import java.util.Map; import static java.lang.String.valueOf; +import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER; import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY; import static org.apache.dubbo.common.constants.CommonConstants.PORT_KEY; +import static org.apache.dubbo.common.constants.CommonConstants.SIDE_KEY; import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY; import static org.apache.dubbo.metadata.MetadataConstants.DEFAULT_METADATA_TIMEOUT_VALUE; import static org.apache.dubbo.metadata.MetadataConstants.METADATA_PROXY_TIMEOUT_KEY; @@ -70,7 +72,8 @@ public class StandardMetadataServiceURLBuilder implements MetadataServiceURLBuil .setPort(port) .setProtocol(protocol) .setPath(MetadataService.class.getName()) - .addParameter(TIMEOUT_KEY, ConfigurationUtils.get(METADATA_PROXY_TIMEOUT_KEY, DEFAULT_METADATA_TIMEOUT_VALUE)); + .addParameter(TIMEOUT_KEY, ConfigurationUtils.get(METADATA_PROXY_TIMEOUT_KEY, DEFAULT_METADATA_TIMEOUT_VALUE)) + .addParameter(SIDE_KEY, CONSUMER); // add parameters params.forEach((name, value) -> urlBuilder.addParameter(name, valueOf(value)));
