You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2021/08/30 05:49:14 UTC

[dubbo] branch 3.0-multi-instances updated: Add ServiceModel pass when invoke

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 3327d2f  Add ServiceModel pass when invoke
3327d2f is described below

commit 3327d2ffe247fcdc49befd41f02721ab83ec7bbe
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Mon Aug 30 13:48:53 2021 +0800

    Add ServiceModel pass when invoke
---
 .../dubbo/rpc/cluster/directory/MockDirInvocation.java       |  5 +++++
 .../dubbo/common/url/component/DubboServiceAddressURL.java   | 12 ++++++++++++
 .../src/main/java/com/alibaba/dubbo/rpc/Invocation.java      | 10 ++++++++++
 .../test/java/org/apache/dubbo/service/MockInvocation.java   |  5 +++++
 .../org/apache/dubbo/registry/client/InstanceAddressURL.java | 12 ++++++++++++
 .../apache/dubbo/registry/integration/RegistryProtocol.java  |  2 ++
 .../src/main/java/org/apache/dubbo/rpc/Invocation.java       |  2 ++
 .../src/main/java/org/apache/dubbo/rpc/RpcInvocation.java    |  5 +++++
 .../java/org/apache/dubbo/rpc/support/MockInvocation.java    |  5 +++++
 .../org/apache/dubbo/rpc/protocol/dubbo/DubboProtocol.java   |  1 +
 10 files changed, 59 insertions(+)

diff --git a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/directory/MockDirInvocation.java b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/directory/MockDirInvocation.java
index 9a0d7c1..75ad1cc 100644
--- a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/directory/MockDirInvocation.java
+++ b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/directory/MockDirInvocation.java
@@ -131,6 +131,11 @@ public class MockDirInvocation implements Invocation {
     }
 
     @Override
+    public void setServiceModel(ServiceModel serviceModel) {
+
+    }
+
+    @Override
     public ServiceModel getServiceModel() {
         return null;
     }
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/url/component/DubboServiceAddressURL.java b/dubbo-common/src/main/java/org/apache/dubbo/common/url/component/DubboServiceAddressURL.java
index fbb31b6..840efcb 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/url/component/DubboServiceAddressURL.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/url/component/DubboServiceAddressURL.java
@@ -18,6 +18,8 @@ package org.apache.dubbo.common.url.component;
 
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.utils.StringUtils;
+import org.apache.dubbo.rpc.model.ScopeModel;
+import org.apache.dubbo.rpc.model.ServiceModel;
 
 import java.util.Map;
 import java.util.Objects;
@@ -102,6 +104,16 @@ public class DubboServiceAddressURL extends ServiceAddressURL {
     }
 
     @Override
+    public ScopeModel getScopeModel() {
+        return consumerURL.getScopeModel();
+    }
+
+    @Override
+    public ServiceModel getServiceModel() {
+        return consumerURL.getServiceModel();
+    }
+
+    @Override
     public int hashCode() {
         final int prime = 31;
         return prime * super.hashCode() + (overrideURL == null ? 0 : overrideURL.hashCode());
diff --git a/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/Invocation.java b/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/Invocation.java
index 1c10ee4..d8ae4e3 100644
--- a/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/Invocation.java
+++ b/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/Invocation.java
@@ -77,6 +77,11 @@ public interface Invocation extends org.apache.dubbo.rpc.Invocation {
     }
 
     @Override
+    default void setServiceModel(ServiceModel serviceModel) {
+
+    }
+
+    @Override
     default ServiceModel getServiceModel() {
         return null;
     }
@@ -165,6 +170,11 @@ public interface Invocation extends org.apache.dubbo.rpc.Invocation {
         }
 
         @Override
+        public void setServiceModel(ServiceModel serviceModel) {
+            delegate.setServiceModel(serviceModel);
+        }
+
+        @Override
         public ServiceModel getServiceModel() {
             return delegate.getServiceModel();
         }
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/service/MockInvocation.java b/dubbo-compatible/src/test/java/org/apache/dubbo/service/MockInvocation.java
index 299dbce..532f6bd 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/service/MockInvocation.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/service/MockInvocation.java
@@ -133,6 +133,11 @@ public class MockInvocation implements Invocation {
     }
 
     @Override
+    public void setServiceModel(ServiceModel serviceModel) {
+
+    }
+
+    @Override
     public ServiceModel getServiceModel() {
         return null;
     }
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/InstanceAddressURL.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/InstanceAddressURL.java
index 46cc333..506dcd2 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/InstanceAddressURL.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/InstanceAddressURL.java
@@ -22,6 +22,8 @@ import org.apache.dubbo.common.url.component.URLParam;
 import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.metadata.MetadataInfo;
 import org.apache.dubbo.rpc.RpcContext;
+import org.apache.dubbo.rpc.model.ScopeModel;
+import org.apache.dubbo.rpc.model.ServiceModel;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -392,6 +394,16 @@ public class InstanceAddressURL extends URL {
     }
 
     @Override
+    public ScopeModel getScopeModel() {
+        return RpcContext.getServiceContext().getConsumerUrl().getScopeModel();
+    }
+
+    @Override
+    public ServiceModel getServiceModel() {
+        return RpcContext.getServiceContext().getConsumerUrl().getServiceModel();
+    }
+
+    @Override
     public boolean equals(Object obj) {
         // instance metadata equals
         if (obj == null) {
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 ca9bdfd..fc2902b 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
@@ -532,6 +532,8 @@ public class RegistryProtocol implements Protocol, ScopeModelAware {
         URL urlToRegistry = new ServiceConfigURL(
             parameters.get(PROTOCOL_KEY) == null ? DUBBO : parameters.get(PROTOCOL_KEY),
             parameters.remove(REGISTER_IP_KEY), 0, getPath(parameters, type), parameters);
+        urlToRegistry = urlToRegistry.setScopeModel(directory.getConsumerUrl().getScopeModel());
+        urlToRegistry = urlToRegistry.setServiceModel(directory.getConsumerUrl().getServiceModel());
         if (directory.isShouldRegister()) {
             directory.setRegisteredConsumerUrl(urlToRegistry);
             registry.register(directory.getRegisteredConsumerUrl());
diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/Invocation.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/Invocation.java
index 04bbdc8..19a0434 100644
--- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/Invocation.java
+++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/Invocation.java
@@ -139,6 +139,8 @@ public interface Invocation {
      */
     Invoker<?> getInvoker();
 
+    void setServiceModel(ServiceModel serviceModel);
+
     ServiceModel getServiceModel();
 
     Object put(Object key, Object value);
diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcInvocation.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcInvocation.java
index a828ca0..eb1af93 100644
--- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcInvocation.java
+++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcInvocation.java
@@ -486,6 +486,11 @@ public class RpcInvocation implements Invocation, Serializable {
     }
 
     @Override
+    public void setServiceModel(ServiceModel serviceModel) {
+        this.serviceModel = serviceModel;
+    }
+
+    @Override
     public ServiceModel getServiceModel() {
         return serviceModel;
     }
diff --git a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/MockInvocation.java b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/MockInvocation.java
index be78c14..2c8a618 100644
--- a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/MockInvocation.java
+++ b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/MockInvocation.java
@@ -119,6 +119,11 @@ public class MockInvocation implements Invocation {
     }
 
     @Override
+    public void setServiceModel(ServiceModel serviceModel) {
+
+    }
+
+    @Override
     public ServiceModel getServiceModel() {
         return null;
     }
diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DubboProtocol.java b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DubboProtocol.java
index 8452d08..680b0b4 100644
--- a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DubboProtocol.java
+++ b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DubboProtocol.java
@@ -118,6 +118,7 @@ public class DubboProtocol extends AbstractProtocol {
 
             Invocation inv = (Invocation) message;
             Invoker<?> invoker = getInvoker(channel, inv);
+            inv.setServiceModel(invoker.getUrl().getServiceModel());
             // need to consider backward-compatibility if it's a callback
             if (Boolean.TRUE.toString().equals(inv.getObjectAttachments().get(IS_CALLBACK_SERVICE_INVOKE))) {
                 String methodsStr = invoker.getUrl().getParameters().get("methods");