大家好,欢迎来到IT知识分享网。
欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送!
在我后台回复 「资料」 可领取
编程高频电子书
!
在我后台回复「面试」可领取硬核面试笔记
!文章导读地址:点击查看文章导读!
感谢你的关注!
最新 Dubbo3 深入理解原理系列
Tripple 协议
因此 Dubbo 框架为了提升协议的通用性,可以和 SpringCloud 以及其他语言应用进行通信,在 Dubbo3.x 版本推出了基于 HTTP/2 的 Triple 协议
HTTP/2 兼容 HTTP/1,并且性能更好,同时在兼容性和性能上都有所提升!
Tripple 协议是 Dubbo3 推出的主力协议,Tripple 的含义就是三,表示是第三代,Tripple 协议的特点:
1、Tripple 协议是 Dubbo3 设计的基于 HTTP2 的 RPC 通信协议规范, 通用性
能有所提升,并且由于是基于 HTTP/2 的,因此 性能
上也要比 HTTP/1.x 要好一些
2、Tripple 协议支持 流式调用
- 这里主要说一下 Tripple 协议支持的流式调用
流式调用是在 Dubbo3.x 版本新增的,如果我们需要使用流式调用的话,需要自己定义对应的方法
首先引入一下需要使用的类 StreamObserver
的依赖:
<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-common</artifactId> <version>3.0.7</version> </dependency>
并且引入一下 Tripple 协议的依赖
<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-rpc-tripple</artifactId> <version>3.0.7</version> </dependency>
比如说,我们在 UserService 接口中定义了流式调用:
public interface UserService {
String hello(String name); // 服务端流式调用 default void helloServerStream(String name, StreamObserver<String> response) {
} // 双端流式调用 default StreamObserver<String> helloStream(StreamObserver<String> response) {
return response;} }
那么流式调用是有三种的:服务端流式调用、客户端流式调用、双端流式调用(由于 Java 语言的限制,客户端流和双端流实现方案是一样的,因此后边只介绍了双端流式调用)
服务端流式调用 的话,返回值需要为 void
,参数中需要有 StreamObserver<String>
,
服务端对应接口实现方法为:
// UserServiceImpl implements UserService @Override public void sayHelloServerStream(String name, StreamObserver<String> response) {
response.onNext(name + " hello"); response.onNext(name + " world"); response.onCompleted(); }
客户端调用者代码为:
userService.helloServerStream("11", new StreamObserver<String>(){
@Override public void onNext(String data) {
// 服务端返回的数据 } @Override public void onError(Throwable throwable) {
} @Override public void onCompleted(String data) {
// 服务端执行完毕 } })
双端流式调用 的话,返回值和参数都要有 StreamObserver
服务端对应接口实现方法为:
// UserServiceImpl implements UserService @Override public StreamObserver<String> sayHelloStream(StreamObserver<String> response) {
return new StreamObserver<String>() {
@Override public void onNext(String data) {
// 接收客户端发送的数据 response.onNext("result:" + data); } @Override public void onError(Throwable throwable) {
} @Override public void onCompleted(String data) {
// 服务端执行完毕 } } }
客户端调用者代码为:
StreamObserver<String> streamObserver = userService.sayHelloStream(new StreamObserver<String>() {
@Override public void onNext(String data) {
System.out.println("接收到响应数据:"+ data); } @Override public void onError(Throwable throwable) {
} @Override public void onCompleted(String data) {
// 接收数据完毕 } }) // 客户端发送数据 streamObserver.onNext("第一次发送数据"); streamObserver.onNext("第二次发送数据"); streamObserver.onCompleted();
- 接下来总结一下 Tripple 协议中的流式调用的优点以及应用场景
首先,流式调用的优点就是 客户端可以多次向服务端发送消息,并且服务端也可以多次接收
,通过 onNext 方法多次发送,比如用户在处理完一部分数据之后,将这一部分数据发送给服务端,之后再去处理下一部分数据,避免了一次发送很多数据的情况
流式调用的应用场景为:接口需要发送大量数据,这些数据通过一个 RPC 请求无法发送完毕,需要分批发送,并且需要保证发送的有序性
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/126129.html