Dubbo 3.0 ? No ! RSocket 永远的神

网络 网络管理
RSocket 是一个新的、语言无关的第七层应用网络协议。它是一个双向、多路复用、基于消息、基于反应流背压的二进制协议。

[[411111]]

背景

最近国内技术圈最热门的事情莫过于 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 项目,添加相关依赖即可

  1. <dependency> 
  2.   <groupId>org.springframework.boot</groupId> 
  3.   <artifactId>spring-boot-starter-rsocket</artifactId> 
  4. </dependency> 

指定 rsocket server 服务端口即可

  1. spring.rsocket.server.port=8848 

定义 RR 请求模型处理信道

使用 @MessageMapping 指定路由路径即可

  1. @Controller 
  2. public class GreetingsController { 
  3.   @MessageMapping("request-response"
  4.   Mono<String> reqResponse(@Payload String payload) { 
  5.    log.info("收到 RR 请求信息: {}", payload); 
  6.    return Mono.just("Hello, " + payload); 
  7.   } 

2. 使用 spring-retrosocket 创建客户端

  • 使用 Spring Initializr 并生成一个新项目。
依赖 版本
spring-retrosocke 0.0.1-SNAPSHOT
Spring Boot 2.5.2
  1. <dependency> 
  2.     <groupId>org.springframework.retrosocket</groupId> 
  3.     <artifactId>spring-retrosocket</artifactId> 
  4.     <version>0.0.1-SNAPSHOT</version> 
  5. </dependency> 
  • 添加 spring maven 仓库

如果您有一个现有的构建,请确保您拥有spring-milestones或spring-snapshotsSpring 存储库。

  1. <repositories> 
  2.    <repository> 
  3.      <id>spring-milestones</id> 
  4.      <name>Spring Milestones</name
  5.      <url>https://repo.spring.io/milestone</url> 
  6.    </repository> 
  7.    <repository> 
  8.      <id>spring-snapshots</id> 
  9.      <name>Spring Snapshots</name
  10.      <url>https://repo.spring.io/snapshot</url> 
  11.      <snapshots> 
  12.        <enabled>true</enabled> 
  13.      </snapshots> 
  14.    </repository> 
  15.  </repositories> 

3. 基本用法

  • 开启 RSocket 客户端支持 在您的 Java 代码中,您需要启用 RSocket 客户端支持。使用@EnableRSocketClient注释。您还需要定义一个RSocketRequesterbean。
  1. @SpringBootApplication 
  2. @EnableRSocketClients 
  3. class RSocketClientApplication { 
  4.  @Bean 
  5.  RSocketRequester requester(RSocketRequester.Builder builder) { 
  6.   return builder.connectTcp("localhost", 8888).block(); 
  7.  } 
  • 然后,定义一个 RSocket 客户端接口(类似于 FeignClient),如下所示:
  1. @RSocketClient 
  2. interface GreetingClient { 
  3.  @MessageMapping("request-response"
  4.  Mono<GreetingResponse> requestResponse(Mono<String> name); 
  • 测试代码
  1. @SpringBootTest 
  2. class DemoApplicationTests { 
  3.  
  4.  @Autowired 
  5.  private GreetingClient greetingClient; 
  6.  
  7.  @Test 
  8.  void testGreetingClient() { 
  9.   Mono<String> stringMono = greetingClient.requestResponse(Mono.just("lengleng")); 
  10.   System.out.println(stringMono.block()); 
  11.  } 

spring-retrosocket github源码:https://github.com/spring-projects-experimental/spring-retrosocket

 

责任编辑:武晓燕 来源: JAVA架构日记
相关推荐

2021-07-05 08:12:53

Nginx架构多进程

2021-08-09 10:21:42

云原生Dubbo3.0 服务治理

2021-08-03 17:00:25

Spring Boot代码Java

2021-07-14 13:12:51

2020-11-14 15:43:35

人工智能算法象棋

2021-09-06 09:46:26

Dubbo 服务端开发

2022-03-15 18:33:34

URL重构Dubbo3.0

2016-01-18 10:49:51

浪潮SAP

2021-12-30 23:45:11

Spring RSocket BroRSocke

2011-02-22 13:32:03

2011-05-11 09:16:30

IIS后门

2015-09-01 10:29:44

数据安全

2015-02-04 10:47:06

2009-09-11 08:39:33

2020-06-01 08:35:36

编程语言JavaPython

2020-07-01 18:31:14

Linuxbash永远循环

2021-02-20 23:30:39

零信任网络安全信息泄露

2023-04-14 08:19:27

2023-06-01 08:10:56

2023-10-18 07:16:41

点赞
收藏

51CTO技术栈公众号