基于 Java 接口模式开发 triple 服务时,底层的序列化机制实现

本文介绍基于 Java 接口模式开发 triple 服务时,底层的序列化机制实现。

1 介绍

Dubbo 实现的 triple 协议易用性更好(不绑定 Protobuf),开发者可以继续使用 Java 接口 直接定义服务。对于期望平滑升级、没有多语言业务或者不熟悉 Protobuf 的用户而言,Java 接口方式是最简单的使用 triple 的方式。

以下介绍这种协议模式下的底层序列化细节:框架会用一个内置的 protobuf 对象将 request 和 response 进行包装(wrapper),也就是对象会被序列化两次,第一次是使用如 serialization=hessian 指定的方式进行序列化,第二次是用 protobuf wrapper 对第一步中序列化后的 byte[] 进行包装后传输

2 使用方式

在使用 Java 接口方式开发 triple 通信服务 的时候,dubbo server 将自动启用 protobuf、protobuf-json 序列化模式支持。

2.1 添加依赖

使用 triple 协议,必须先添加如下依赖:

  1. <dependencies>
  2. <dependency>
  3. <groupId>com.google.protobuf</groupId>
  4. <artifactId>protobuf-java</artifactId>
  5. <version>3.19.6</version>
  6. </dependency>
  7. <!-- 提供 protobuf-json 格式请求支持 -->>
  8. <dependency>
  9. <groupId>com.google.protobuf</groupId>
  10. <artifactId>protobuf-java-util</artifactId>
  11. <version>3.19.6</version>
  12. </dependency>
  13. </dependencies>

2.2 配置启用

只要是基于 Java 接口方式模式使用 triple 协议 ,就会使用 protobuf wrapper 序列化,只要定义 Java 接口并启用 triple 协议即可:

通过 Java 接口定义 Dubbo 服务:

  1. public interface GreetingsService {
  2. String sayHi(String name);
  3. }

配置使用 triple 协议(如果要设置底层使用的序列化协议,需要继续设置 serialization,如 hessian、msgpack 等):

  1. # application.yml (Spring Boot)
  2. dubbo:
  3. protocol:
  4. name: tri
  5. serialization: hessian

  1. # dubbo.properties
  2. dubbo.protocol.name=tri
  3. dubbo.protocol.serialization=hessian

  1. <dubbo:protocol name="tri" serialization="hessian"/>

最后修改 September 13, 2024: Refactor website structure (#2860) (1a4b998f54b)