【032】Dubbo3从0到1系列之triple协议场景
文章目录
- 六、triple协议场景
- 6.1 添加依赖
- 6.2 配置启用
- 6.3 protobuf 服务定义示例
- 6.4 Java接口模式开发triple
六、triple协议场景
- protobuf
- protobuf-json
Protobuf(Protocol Buffers) 是由 Google 开发的一种轻量级、高效的数据交换格式,它被用于结构化数据的序列化、反序列化和传输。 相比于XML 和JSON 等文本格式,Protobuf 具有更小的数据体积、更快的解析速度和更强的可扩展性。
- 在使用 Protobuf(IDL) 开发 triple 通信服务 的时候,dubbo server 将自动启用 protobuf、protobuf-json 序列化模式支持
6.1 添加依赖
使用 triple + protobuf 模式,必须添加以下依赖:
<dependencies><dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java</artifactId><version>3.19.6</version></dependency><!-- 提供 protobuf-json 格式请求支持 -->><dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java-util</artifactId><version>3.19.6</version></dependency>
</dependencies>
6.2 配置启用
只要是基于 Protobuf(IDL) 开发模式进行 triple 协议通信 ,就会使用 protobuf 序列化,只要定义 protobuf 文件并启用 triple 协议即可。
当使用 cURL 访问 triple 服务时,是会启用 protobuf-json 序列化模式
curl \--header "Content-Type: application/json" \--data '{"name":"Dubbo"}' \http://localhost:50052/org.apache.dubbo.samples.tri.unary.Greeter/greet/
6.3 protobuf 服务定义示例
syntax = "proto3";
option java_multiple_files = true;
package org.apache.dubbo.samples.tri.unary;message GreeterRequest {string name = 1;
}
message GreeterReply {string message = 1;
}service Greeter{rpc greet(GreeterRequest) returns (GreeterReply);
}
协议配置:
# application.yml (Spring Boot)
dubbo:protocol:name: tri
# dubbo.properties
dubbo.protocol.name=tri
<dubbo:protocol name="tri" />
6.4 Java接口模式开发triple
Dubbo 实现的 triple 协议易用性更好(不绑定 Protobuf),开发者可以继续使用 Java 接口 直接定义服务。对于期望平滑升级、没有多语言业务或者不熟悉 Protobuf 的用户而言,Java 接口方式是最简单的使用 triple 的方式。
以下介绍这种协议模式下的底层序列化细节:框架会用一个内置的 protobuf 对象将 request 和 response 进行包装(wrapper),也就是对象会被序列化两次,第一次是使用如 serialization=hessian 指定的方式进行序列化,第二次是用 protobuf wrapper 对第一步中序列化后的 byte[] 进行包装后传输。
✅ 1. 添加依赖
使用 triple 协议,必须先添加如下依赖:
<dependencies><dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java</artifactId><version>3.19.6</version></dependency><!-- 提供 protobuf-json 格式请求支持 -->><dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java-util</artifactId><version>3.19.6</version></dependency>
</dependencies>
✅ 2. 配置使用
只要是基于 Java 接口方式模式使用 triple 协议 ,就会使用 protobuf wrapper 序列化,只要定义 Java 接口并启用 triple 协议即可:
通过 Java 接口定义 Dubbo 服务:
public interface GreetingsService {String sayHi(String name);
}
配置使用 triple 协议(如果要设置底层使用的序列化协议,需要继续设置 serialization,如 hessian、msgpack 等):
# application.yml (Spring Boot)
dubbo:protocol:name: triserialization: hessian
# dubbo.properties
dubbo.protocol.name=tri
dubbo.protocol.serialization=hessian
<dubbo:protocol name="tri" serialization="hessian"/>
