
背景
最近国内技术圈最热门的事情莫过于 Apache Dubbo 3.0 发布,作为 Dubbo 3 中最重要的特性是选择 HTTP/2 作为底层通信协议,使用 protobuf 作为序列化协议的组合,这套组合方案也是 gRPC 协议使用的方案。最终还是没有选择 RSocket 协议作为 reactive programming (响应式编程)的补充方案。
Dubbo 3.0 源码示例
- RSocket 是一个新的、语言无关的第七层应用网络协议。它是一个双向、多路复用、基于消息、基于反应流背压的二进制协议。和传统网络编程模型 HTTP 的 Request/Response 方式不同。RSocket 除了 Request/Response 方式之外,还支持 Fire And Forget(发送不回)、Stream(单向流)、Channel(双向流)。
- RSocket 的基础可以参考笔者 《RSocket | 替代 REST 的不二选择》文章参考学习。
- 本文着重说明 Spring 官方孵化器新上项目 spring-retrosocket 使用。
Spring 孵化器截图
spring-retrosocket 通过提供注解驱动 RSocket 的客户端,通过注解调用屏蔽 rosocket-java sdk 的复杂性。
1. 创建 RSocket Server创建 spring boot 项目,添加相关依赖即可
org.springframework.boot spring-boot-starter-rsocket
指定 rsocket server 服务端口即可
spring.rsocket.server.port=8848
定义 RR 请求模型处理信道
使用 @MessageMapping 指定路由路径即可
@Controller
- 使用 Spring Initializr 并生成一个新项目。
| 依赖 | 版本 |
|---|---|
| spring-retrosocke | 0.0.1-SNAPSHOT |
| Spring Boot | 2.5.2 |
org.springframework.retrosocket spring-retrosocket0.0.1-SNAPSHOT
- 添加 spring maven 仓库
如果您有一个现有的构建,请确保您拥有spring-milestones或spring-snapshotsSpring 存储库。
3. 基本用法spring-milestones Spring Milestones https://repo.spring.io/milestone spring-snapshots Spring Snapshots https://repo.spring.io/snapshot true
- 开启 RSocket 客户端支持 在您的 Java 代码中,您需要启用 RSocket 客户端支持。使用@EnableRSocketClient注释。您还需要定义一个RSocketRequesterbean。
@SpringBootApplication
- 然后,定义一个 RSocket 客户端接口(类似于 FeignClient),如下所示:
@RSocketClient
- 测试代码
@SpringBootTest
spring-retrosocket github源码:https://github.com/spring-projects-experimental/spring-retrosocket




