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 2022/02/06 04:07:44 UTC

[dubbo] branch master updated: feat: consumer support specify serialization type (#9550)

This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/master by this push:
     new 2646c9d  feat: consumer support specify serialization type (#9550)
2646c9d is described below

commit 2646c9d493061d248b017d44b6d0346925100eef
Author: jessin <18...@163.com>
AuthorDate: Sun Feb 6 12:04:56 2022 +0800

    feat: consumer support specify serialization type (#9550)
    
    * consumer support specify serialization type
    
    * xml support config consumer serialization
    
    Co-authored-by: jessinguo <je...@tencent.com>
---
 .../dubbo/config/AbstractReferenceConfig.java       | 21 +++++++++++++++++----
 .../dubbo/config/annotation/DubboReference.java     |  6 ++++++
 .../apache/dubbo/config/annotation/Reference.java   |  6 ++++++
 .../builders/AbstractReferenceBuilder.java          | 13 +++++++++++++
 .../src/main/resources/META-INF/compat/dubbo.xsd    |  5 +++++
 .../src/main/resources/META-INF/dubbo.xsd           |  5 +++++
 .../annotation/ReferenceBeanBuilderTest.java        | 19 +++++++++----------
 7 files changed, 61 insertions(+), 14 deletions(-)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java
index f2038a1..9fca8db 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java
@@ -16,14 +16,14 @@
  */
 package org.apache.dubbo.config;
 
-import org.apache.dubbo.common.utils.StringUtils;
-import org.apache.dubbo.config.support.Parameter;
-import org.apache.dubbo.rpc.support.ProtocolUtils;
-
 import static org.apache.dubbo.common.constants.CommonConstants.INVOKER_LISTENER_KEY;
 import static org.apache.dubbo.common.constants.CommonConstants.REFERENCE_FILTER_KEY;
 import static org.apache.dubbo.common.constants.CommonConstants.STUB_EVENT_KEY;
 
+import org.apache.dubbo.common.utils.StringUtils;
+import org.apache.dubbo.config.support.Parameter;
+import org.apache.dubbo.rpc.support.ProtocolUtils;
+
 /**
  * AbstractConsumerConfig
  *
@@ -80,6 +80,11 @@ public abstract class AbstractReferenceConfig extends AbstractInterfaceConfig {
 
     protected String router;
 
+    /**
+     * The serialization type
+     */
+    protected String serialization;
+
     public Boolean isCheck() {
         return check;
     }
@@ -223,4 +228,12 @@ public abstract class AbstractReferenceConfig extends AbstractInterfaceConfig {
     public void setRouter(String router) {
         this.router = router;
     }
+
+    public String getSerialization() {
+        return serialization;
+    }
+
+    public void setSerialization(String serialization) {
+        this.serialization = serialization;
+    }
 }
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/annotation/DubboReference.java b/dubbo-common/src/main/java/org/apache/dubbo/config/annotation/DubboReference.java
index 34c41a1..231eb83 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/annotation/DubboReference.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/annotation/DubboReference.java
@@ -295,4 +295,10 @@ public @interface DubboReference {
      * @see RegistryConstants#PROVIDED_BY
      */
     String[] providedBy() default {};
+
+    /**
+     * specify serialization from consumer side
+     * @see org.apache.dubbo.remoting.Constants#SERIALIZATION_KEY
+     */
+    String serialization() default "";
 }
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/annotation/Reference.java b/dubbo-common/src/main/java/org/apache/dubbo/config/annotation/Reference.java
index 82f47ee..a3503e6 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/annotation/Reference.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/annotation/Reference.java
@@ -280,4 +280,10 @@ public @interface Reference {
      * @since 2.7.3
      */
     String id() default "";
+
+    /**
+     * specify serialization from consumer side
+     * @see org.apache.dubbo.remoting.Constants#SERIALIZATION_KEY
+     */
+    String serialization() default "";
 }
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/AbstractReferenceBuilder.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/AbstractReferenceBuilder.java
index d84f309..754ac79 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/AbstractReferenceBuilder.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/AbstractReferenceBuilder.java
@@ -66,6 +66,11 @@ public abstract class AbstractReferenceBuilder<T extends AbstractReferenceConfig
      */
     protected String group;
 
+    /**
+     * The serialization type
+     */
+    protected String serialization;
+
     public B check(Boolean check) {
         this.check = check;
         return getThis();
@@ -126,6 +131,11 @@ public abstract class AbstractReferenceBuilder<T extends AbstractReferenceConfig
         return getThis();
     }
 
+    public B serialization(String serialization) {
+        this.serialization = serialization;
+        return getThis();
+    }
+
     @Override
     public void build(T instance) {
         super.build(instance);
@@ -157,5 +167,8 @@ public abstract class AbstractReferenceBuilder<T extends AbstractReferenceConfig
         if (!StringUtils.isEmpty(group)) {
             instance.setGroup(group);
         }
+        if (!StringUtils.isEmpty(serialization)) {
+            instance.setSerialization(serialization);
+        }
     }
 }
diff --git a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd
index 57440c7..d05f976 100644
--- a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd
+++ b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd
@@ -244,6 +244,11 @@
                             <![CDATA[ The routers ]]></xsd:documentation>
                     </xsd:annotation>
                 </xsd:attribute>
+                <xsd:attribute name="serialization" type="xsd:string">
+                    <xsd:annotation>
+                        <xsd:documentation><![CDATA[ The serialization protocol of service. ]]></xsd:documentation>
+                    </xsd:annotation>
+                </xsd:attribute>
             </xsd:extension>
         </xsd:complexContent>
     </xsd:complexType>
diff --git a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
index 9df1f9a..f5a21c4 100644
--- a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
+++ b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
@@ -245,6 +245,11 @@
                             <![CDATA[ The routers ]]></xsd:documentation>
                     </xsd:annotation>
                 </xsd:attribute>
+                <xsd:attribute name="serialization" type="xsd:string">
+                    <xsd:annotation>
+                        <xsd:documentation><![CDATA[ The serialization protocol of service. ]]></xsd:documentation>
+                    </xsd:annotation>
+                </xsd:attribute>
             </xsd:extension>
         </xsd:complexContent>
     </xsd:complexType>
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceBeanBuilderTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceBeanBuilderTest.java
index 029ae16..e4c2ff5 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceBeanBuilderTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceBeanBuilderTest.java
@@ -17,11 +17,17 @@
 package org.apache.dubbo.config.spring.beans.factory.annotation;
 
 
+import static org.apache.dubbo.common.utils.CollectionUtils.ofSet;
+import static org.springframework.core.annotation.AnnotationUtils.findAnnotation;
+import static org.springframework.util.ReflectionUtils.findField;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.dubbo.config.annotation.Reference;
 import org.apache.dubbo.config.spring.ReferenceBean;
 import org.apache.dubbo.rpc.model.ApplicationModel;
-
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
@@ -34,14 +40,6 @@ import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import static org.apache.dubbo.common.utils.CollectionUtils.ofSet;
-import static org.springframework.core.annotation.AnnotationUtils.findAnnotation;
-import static org.springframework.util.ReflectionUtils.findField;
-
 /**
  * {@link ReferenceBeanBuilder} Test
  *
@@ -59,7 +57,7 @@ public class ReferenceBeanBuilderTest {
             interfaceClass = CharSequence.class,
             interfaceName = "java.lang.CharSequence",
             version = "1.0.0", group = "TEST_GROUP", url = "dubbo://localhost:12345",
-            client = "client", generic = true, injvm = true,
+            client = "client", generic = true, injvm = true, serialization = "fastjson",
             check = false, init = false, lazy = true,
             stubevent = true, reconnect = "reconnect", sticky = true,
             proxy = "javassist", stub = "java.lang.CharSequence", cluster = "failover",
@@ -130,6 +128,7 @@ public class ReferenceBeanBuilderTest {
         Assertions.assertEquals("reference", referenceBean.getId());
         Assertions.assertEquals(ofSet("service1", "service2", "service3"), referenceBean.getSubscribedServices());
         Assertions.assertEquals("service1,service2,service3", referenceBean.getProvidedBy());
+        Assertions.assertEquals("fastjson", referenceBean.getSerialization());
 
         // parameters
         Map<String, String> parameters = new HashMap<String, String>();