This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch 3.0-multi-instances
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.0-multi-instances by this
push:
new 5568541 Add ServiceModel pass when init
5568541 is described below
commit 5568541f15cc9626ff8f05399b65af7a28594296
Author: Albumen Kevin <[email protected]>
AuthorDate: Mon Aug 30 12:01:15 2021 +0800
Add ServiceModel pass when init
---
.../src/main/java/org/apache/dubbo/common/URL.java | 6 ++----
.../apache/dubbo/rpc/model/ServiceRepository.java | 18 ++++++++----------
.../org/apache/dubbo/config/ReferenceConfig.java | 22 ++++++++++++----------
.../org/apache/dubbo/config/ServiceConfig.java | 20 ++++++++++++--------
.../registry/integration/RegistryProtocol.java | 3 +--
.../dubbo/rpc/proxy/InvokerInvocationHandler.java | 6 +-----
.../dubbo/rpc/protocol/grpc/GrpcProtocolTest.java | 12 +++++-------
7 files changed, 41 insertions(+), 46 deletions(-)
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java
b/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java
index 654ecab..3674f9f 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java
@@ -549,8 +549,7 @@ class URL implements Serializable {
}
public URL setScopeModel(ScopeModel scopeModel) {
- putAttribute(CommonConstants.SCOPE_MODEL, scopeModel);
- return this;
+ return putAttribute(CommonConstants.SCOPE_MODEL, scopeModel);
}
public ScopeModel getScopeModel() {
@@ -558,8 +557,7 @@ class URL implements Serializable {
}
public URL setServiceModel(ServiceModel serviceModel) {
- putAttribute(CommonConstants.SERVICE_MODEL, serviceModel);
- return this;
+ return putAttribute(CommonConstants.SERVICE_MODEL, serviceModel);
}
public ServiceModel getServiceModel() {
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceRepository.java
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceRepository.java
index e73caea..7207f1d 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceRepository.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceRepository.java
@@ -30,7 +30,6 @@ import org.apache.dubbo.config.ServiceConfigBase;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
@@ -115,15 +114,9 @@ public class ServiceRepository extends LifecycleAdapter
implements FrameworkExt,
serviceMetadata, null);
consumers.putIfAbsent(serviceKey, consumerModel);
}
- public void registerConsumer(String serviceKey,
- ServiceDescriptor serviceDescriptor,
- ReferenceConfigBase<?> rc,
- Object proxy,
- ServiceMetadata serviceMetadata,
- Map<String, AsyncMethodInfo> methodConfigs) {
- ConsumerModel consumerModel = new
ConsumerModel(serviceMetadata.getServiceKey(), proxy, serviceDescriptor, rc,
- serviceMetadata, methodConfigs);
- consumers.putIfAbsent(serviceKey, consumerModel);
+
+ public void registerConsumer(ConsumerModel consumerModel) {
+ consumers.putIfAbsent(consumerModel.getServiceKey(), consumerModel);
}
public void reRegisterConsumer(String newServiceKey, String serviceKey) {
@@ -145,6 +138,11 @@ public class ServiceRepository extends LifecycleAdapter
implements FrameworkExt,
providersWithoutGroup.putIfAbsent(keyWithoutGroup(serviceKey),
providerModel);
}
+ public void registerProvider(ProviderModel providerModel) {
+ providers.putIfAbsent(providerModel.getServiceKey(), providerModel);
+
providersWithoutGroup.putIfAbsent(keyWithoutGroup(providerModel.getServiceKey()),
providerModel);
+ }
+
private static String keyWithoutGroup(String serviceKey) {
String interfaceName = interfaceFromServiceKey(serviceKey);
String version = versionFromServiceKey(serviceKey);
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 6bf4129..171745f 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
@@ -111,6 +111,8 @@ public class ReferenceConfig<T> extends
ReferenceConfigBase<T> {
*/
private ProxyFactory proxyFactory;
+ private ConsumerModel consumerModel;
+
/**
* The interface proxy reference
*/
@@ -257,13 +259,10 @@ public class ReferenceConfig<T> extends
ReferenceConfigBase<T> {
ServiceRepository repository =
getApplicationModel().getApplicationServiceRepository();
ServiceDescriptor serviceDescriptor =
repository.registerService(interfaceClass);
- repository.registerConsumer(
- serviceMetadata.getServiceKey(),
- serviceDescriptor,
- this,
- null,
- serviceMetadata,
- createAsyncMethodInfo());
+ consumerModel = new ConsumerModel(serviceMetadata.getServiceKey(),
proxy, serviceDescriptor, this,
+ serviceMetadata, createAsyncMethodInfo());
+
+ repository.registerConsumer(consumerModel);
serviceMetadata.getAttachments().putAll(referenceParameters);
@@ -272,7 +271,6 @@ public class ReferenceConfig<T> extends
ReferenceConfigBase<T> {
serviceMetadata.setTarget(ref);
serviceMetadata.addAttribute(PROXY_CLASS_REF, ref);
- ConsumerModel consumerModel =
repository.lookupReferredService(serviceMetadata.getServiceKey());
consumerModel.setProxyObject(ref);
consumerModel.initMethodModels();
@@ -390,7 +388,8 @@ public class ReferenceConfig<T> extends
ReferenceConfigBase<T> {
URL consumerUrl = new ServiceConfigURL(CONSUMER_PROTOCOL,
referenceParameters.get(REGISTER_IP_KEY), 0,
referenceParameters.get(INTERFACE_KEY), referenceParameters);
- consumerUrl.setScopeModel(getScopeModel());
+ consumerUrl = consumerUrl.setScopeModel(getScopeModel());
+ consumerUrl = consumerUrl.setServiceModel(consumerModel);
MetadataUtils.publishServiceDefinition(consumerUrl);
// create service proxy
@@ -404,7 +403,8 @@ public class ReferenceConfig<T> extends
ReferenceConfigBase<T> {
*/
private void createInvokerForLocal(Map<String, String>
referenceParameters) {
URL url = new ServiceConfigURL(LOCAL_PROTOCOL, LOCALHOST_VALUE, 0,
interfaceClass.getName()).addParameters(referenceParameters);
- url.setScopeModel(getScopeModel());
+ url = url.setScopeModel(getScopeModel());
+ url = url.setServiceModel(consumerModel);
invoker = protocolSPI.refer(interfaceClass, url);
if (logger.isInfoEnabled()) {
logger.info("Using in jvm service " + interfaceClass.getName());
@@ -422,6 +422,7 @@ public class ReferenceConfig<T> extends
ReferenceConfigBase<T> {
if (StringUtils.isEmpty(url.getPath())) {
url = url.setPath(interfaceName);
}
+ url = url.setServiceModel(consumerModel);
if (UrlUtils.isRegistry(url)) {
urls.add(url.putAttribute(REFER_KEY, referenceParameters));
} else {
@@ -445,6 +446,7 @@ public class ReferenceConfig<T> extends
ReferenceConfigBase<T> {
if (monitorUrl != null) {
u = u.putAttribute(MONITOR_KEY, monitorUrl);
}
+ u = u.setServiceModel(consumerModel);
urls.add(u.putAttribute(REFER_KEY, referenceParameters));
}
}
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 254bfc4..8e5213d 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
@@ -43,6 +43,7 @@ import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Protocol;
import org.apache.dubbo.rpc.ProxyFactory;
import org.apache.dubbo.rpc.cluster.ConfiguratorFactory;
+import org.apache.dubbo.rpc.model.ProviderModel;
import org.apache.dubbo.rpc.model.ServiceDescriptor;
import org.apache.dubbo.rpc.model.ServiceRepository;
import org.apache.dubbo.rpc.service.GenericService;
@@ -124,6 +125,8 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
*/
private ProxyFactory proxyFactory;
+ private ProviderModel providerModel;
+
/**
* Whether the provider has been exported
*/
@@ -355,13 +358,13 @@ public class ServiceConfig<T> extends
ServiceConfigBase<T> {
private void doExportUrls() {
ServiceRepository repository =
getApplicationModel().getApplicationServiceRepository();
ServiceDescriptor serviceDescriptor =
repository.registerService(getInterfaceClass());
- repository.registerProvider(
- getUniqueServiceName(),
- ref,
- serviceDescriptor,
- this,
- serviceMetadata
- );
+ providerModel = new ProviderModel(getUniqueServiceName(),
+ ref,
+ serviceDescriptor,
+ this,
+ serviceMetadata);
+
+ repository.registerProvider(providerModel);
List<URL> registryURLs = ConfigValidationUtils.loadRegistries(this,
true);
@@ -536,7 +539,8 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
url = this.getExtensionLoader(ConfiguratorFactory.class)
.getExtension(url.getProtocol()).getConfigurator(url).configure(url);
}
- url.setScopeModel(getScopeModel());
+ url = url.setScopeModel(getScopeModel());
+ url = url.setServiceModel(providerModel);
return url;
}
diff --git
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
index 661771e..ca9bdfd 100644
---
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
+++
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
@@ -203,8 +203,7 @@ public class RegistryProtocol implements Protocol,
ScopeModelAware {
}
private void registerStatedUrl(URL registryUrl, URL registeredProviderUrl,
boolean registered) {
- ApplicationModel applicationModel =
getApplicationModel(registryUrl.getScopeModel());
- ProviderModel model =
applicationModel.getProviderModel(registeredProviderUrl.getServiceKey());
+ ProviderModel model = (ProviderModel)
registeredProviderUrl.getServiceModel();
model.addStatedUrl(new ProviderModel.RegisterStatedURL(
registeredProviderUrl,
registryUrl,
diff --git
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/proxy/InvokerInvocationHandler.java
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/proxy/InvokerInvocationHandler.java
index 712bbe6..ca02f6b 100644
---
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/proxy/InvokerInvocationHandler.java
+++
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/proxy/InvokerInvocationHandler.java
@@ -23,7 +23,6 @@ import org.apache.dubbo.rpc.Constants;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.RpcInvocation;
import org.apache.dubbo.rpc.RpcServiceContext;
-import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.rpc.model.ConsumerModel;
import java.lang.reflect.Field;
@@ -54,11 +53,8 @@ public class InvokerInvocationHandler implements
InvocationHandler {
public InvokerInvocationHandler(Invoker<?> handler) {
this.invoker = handler;
this.url = invoker.getUrl();
- String serviceKey = this.url.getServiceKey();
this.protocolServiceKey = this.url.getProtocolServiceKey();
- if (serviceKey != null) {
- this.consumerModel =
ApplicationModel.defaultModel().getConsumerModel(serviceKey);
- }
+ this.consumerModel = (ConsumerModel) this.url.getServiceModel();
}
@Override
diff --git
a/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java
b/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java
index 7de930d..798ed37 100644
---
a/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java
+++
b/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java
@@ -25,6 +25,7 @@ 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.AsyncMethodInfo;
+import org.apache.dubbo.rpc.model.ConsumerModel;
import org.apache.dubbo.rpc.model.ServiceDescriptor;
import org.apache.dubbo.rpc.model.ServiceMetadata;
import org.apache.dubbo.rpc.protocol.grpc.support.DubboGreeterGrpc;
@@ -67,13 +68,10 @@ public class GrpcProtocolTest {
serviceMetadata.setServiceKey(URL.buildKey(DubboGreeterGrpc.IGreeter.class.getName(),
null, null));
Map<String, AsyncMethodInfo> methodConfigs = new HashMap<>();
-
ApplicationModel.defaultModel().getApplicationServiceRepository().registerConsumer(
- url.getServiceKey(),
- serviceDescriptor,
- mockReferenceConfig,
- null,
- serviceMetadata,
- methodConfigs);
+ ConsumerModel consumerModel = new
ConsumerModel(serviceMetadata.getServiceKey(), null, serviceDescriptor,
mockReferenceConfig,
+ serviceMetadata, methodConfigs);
+
+
ApplicationModel.defaultModel().getApplicationServiceRepository().registerConsumer(consumerModel);
protocol.export(proxy.getInvoker(serviceImpl,
DubboGreeterGrpc.IGreeter.class, url));
serviceImpl =
proxy.getProxy(protocol.refer(DubboGreeterGrpc.IGreeter.class, url));