You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2022/01/07 03:34:44 UTC
[dubbo] branch 3.0 updated: fix meta service definition (#9540)
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
The following commit(s) were added to refs/heads/3.0 by this push:
new cdf3452 fix meta service definition (#9540)
cdf3452 is described below
commit cdf3452052372f500928c8f394e965c22f726160
Author: ken.lj <ke...@gmail.com>
AuthorDate: Fri Jan 7 11:34:32 2022 +0800
fix meta service definition (#9540)
---
.../org/apache/dubbo/config/ReferenceConfig.java | 2 +
.../org/apache/dubbo/config/ServiceConfig.java | 6 +--
.../registry/client/metadata/MetadataUtils.java | 46 ++++++++++++++++------
3 files changed, 38 insertions(+), 16 deletions(-)
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
index 03875d9..0632cd3 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
@@ -33,6 +33,7 @@ import org.apache.dubbo.config.annotation.Reference;
import org.apache.dubbo.config.support.Parameter;
import org.apache.dubbo.config.utils.ConfigValidationUtils;
import org.apache.dubbo.metadata.ServiceNameMapping;
+import org.apache.dubbo.registry.client.metadata.MetadataUtils;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Protocol;
import org.apache.dubbo.rpc.ProxyFactory;
@@ -402,6 +403,7 @@ public class ReferenceConfig<T> extends ReferenceConfigBase<T> {
referenceParameters.get(INTERFACE_KEY), referenceParameters);
consumerUrl = consumerUrl.setScopeModel(getScopeModel());
consumerUrl = consumerUrl.setServiceModel(consumerModel);
+ MetadataUtils.publishServiceDefinition(interfaceName, consumerUrl, getScopeModel(), getApplicationModel());
// create service proxy
return (T) proxyFactory.getProxy(invoker, ProtocolUtils.isGeneric(generic));
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
index 9dc68a9..b0596fc 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
@@ -571,11 +571,7 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
if (!isGeneric(generic) && !isMetadataService(interfaceName)) {
ServiceDescriptor descriptor = getScopeModel().getServiceRepository().getService(interfaceName);
if (descriptor != null) {
- MetadataUtils.publishServiceDefinition(
- getScopeModel().getServiceRepository().getService(interfaceName),
- version == null ? "" : version,
- group == null ? "" : group,
- getApplicationModel());
+ MetadataUtils.publishServiceDefinition(interfaceName, url, getScopeModel(), getApplicationModel());
}
}
}
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java
index ffbbb95..694c999 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java
@@ -34,6 +34,7 @@ import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Protocol;
import org.apache.dubbo.rpc.ProxyFactory;
import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.ModuleModel;
import org.apache.dubbo.rpc.model.ScopeModel;
import org.apache.dubbo.rpc.model.ServiceDescriptor;
@@ -43,6 +44,7 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
+import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER_SIDE;
import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER_SIDE;
import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_METADATA_STORAGE_TYPE;
import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_CLUSTER_KEY;
@@ -63,29 +65,51 @@ public class MetadataUtils {
return metadataServiceProxies.computeIfAbsent(computeKey(instance), k -> referProxy(k, instance));
}
- public static void publishServiceDefinition(ServiceDescriptor serviceDescriptor, String version, String group, ApplicationModel applicationModel) {
+ public static void publishServiceDefinition(String serviceName, URL url, ModuleModel scopeModel, ApplicationModel applicationModel) {
if (getMetadataReports(applicationModel).size() == 0) {
String msg = "Remote Metadata Report Server not hasn't been configured or unavailable . Unable to get Metadata from remote!";
logger.warn(msg);
}
- String serviceName = serviceDescriptor.getServiceName();
- FullServiceDefinition serviceDefinition = serviceDescriptor.getServiceDefinition(serviceName);
-
try {
- if (StringUtils.isNotEmpty(serviceName)) {
+ String side = url.getSide();
+ if (PROVIDER_SIDE.equalsIgnoreCase(side)) {
+ ServiceDescriptor serviceDescriptor = scopeModel.getServiceRepository().getService(serviceName);
+ if (serviceDescriptor == null) {
+ return;
+ }
+ FullServiceDefinition serviceDefinition = serviceDescriptor.getServiceDefinition(serviceName);
+
+ if (StringUtils.isNotEmpty(serviceName) && serviceDefinition != null) {
+ serviceDefinition.setParameters(url.getParameters());
+ for (Map.Entry<String, MetadataReport> entry : getMetadataReports(applicationModel).entrySet()) {
+ MetadataReport metadataReport = entry.getValue();
+ metadataReport.storeProviderMetadata(
+ new MetadataIdentifier(
+ serviceName,
+ url.getVersion() == null ? "" : url.getVersion(),
+ url.getGroup() == null ? "" : url.getGroup(),
+ PROVIDER_SIDE,
+ applicationModel.getApplicationName())
+ , serviceDefinition);
+ }
+ }
+ } else {
for (Map.Entry<String, MetadataReport> entry : getMetadataReports(applicationModel).entrySet()) {
MetadataReport metadataReport = entry.getValue();
- metadataReport.storeProviderMetadata(new MetadataIdentifier(serviceName,
- version, group,
- PROVIDER_SIDE, applicationModel.getApplicationName()), serviceDefinition);
+ metadataReport.storeConsumerMetadata(
+ new MetadataIdentifier(
+ serviceName,
+ url.getVersion() == null ? "" : url.getVersion(),
+ url.getGroup() == null ? "" : url.getGroup(),
+ CONSUMER_SIDE,
+ applicationModel.getApplicationName()),
+ url.getParameters());
}
- return;
}
- logger.error("publishProvider interfaceName is empty.");
} catch (Exception e) {
//ignore error
- logger.error("publishProvider getServiceDescriptor error.", e);
+ logger.error("publish service definition metadata error.", e);
}
}