【最新Dubbo3深入理解】Dubbo高性能之网络通信协议(下)

【最新Dubbo3深入理解】Dubbo高性能之网络通信协议(下)本文介绍了 Dubbo3 0 中的 Triple 协议 基于 HTTP 2 的 RPC 协议 支持流式调用 包括服务端流式 客户端流式和双端流式

大家好,欢迎来到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

(0)
上一篇 2025-09-21 15:10
下一篇 2025-09-21 15:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信