本文主要是介绍【最新Dubbo3深入理解】Dubbo高性能之网络通信协议(下),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
欢迎关注公众号(通过文章导读关注:【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>(){@Overridepublic void onNext(String data) {// 服务端返回的数据}@Overridepublic void onError(Throwable throwable) {}@Overridepublic void onCompleted(String data) {// 服务端执行完毕}
})
双端流式调用 的话,返回值和参数都要有 StreamObserver
服务端对应接口实现方法为:
// UserServiceImpl implements UserService
@Override
public StreamObserver<String> sayHelloStream(StreamObserver<String> response) {return new StreamObserver<String>() {@Overridepublic void onNext(String data) {// 接收客户端发送的数据response.onNext("result:" + data);}@Overridepublic void onError(Throwable throwable) {}@Overridepublic void onCompleted(String data) {// 服务端执行完毕}}
}
客户端调用者代码为:
StreamObserver<String> streamObserver = userService.sayHelloStream(new StreamObserver<String>() {@Overridepublic void onNext(String data) {System.out.println("接收到响应数据:"+ data);}@Overridepublic void onError(Throwable throwable) {}@Overridepublic void onCompleted(String data) {// 接收数据完毕}
})
// 客户端发送数据
streamObserver.onNext("第一次发送数据");
streamObserver.onNext("第二次发送数据");
streamObserver.onCompleted();
- 接下来总结一下 Tripple 协议中的流式调用的优点以及应用场景
首先,流式调用的优点就是 客户端可以多次向服务端发送消息,并且服务端也可以多次接收
,通过 onNext 方法多次发送,比如用户在处理完一部分数据之后,将这一部分数据发送给服务端,之后再去处理下一部分数据,避免了一次发送很多数据的情况
流式调用的应用场景为:接口需要发送大量数据,这些数据通过一个 RPC 请求无法发送完毕,需要分批发送,并且需要保证发送的有序性
这篇关于【最新Dubbo3深入理解】Dubbo高性能之网络通信协议(下)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!