栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 网络技术 > 网络管理

Dubbo 3.0 ? No ! RSocket 永远的神

网络管理 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力



背景

最近国内技术圈最热门的事情莫过于 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 
  • public class GreetingsController {   @MessageMapping("request-response") 
  •   Mono reqResponse(@Payload String payload) {    log.info("收到 RR 请求信息: {}", payload); 
  •    return Mono.just("Hello, " + payload);   } 
  • 2. 使用 spring-retrosocket 创建客户端
    • 使用 Spring Initializr 并生成一个新项目。
    依赖 版本
    spring-retrosocke 0.0.1-SNAPSHOT
    Spring Boot 2.5.2
     
  •     org.springframework.retrosocket     spring-retrosocket 
  •     0.0.1-SNAPSHOT  
    • 添加 spring maven 仓库

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

     
  •          spring-milestones 
  •      Spring Milestones      https://repo.spring.io/milestone 
  •         
  •      spring-snapshots      Spring Snapshots 
  •      https://repo.spring.io/snapshot       
  •        true       
  •       
  • 3. 基本用法
    • 开启 RSocket 客户端支持 在您的 Java 代码中,您需要启用 RSocket 客户端支持。使用@EnableRSocketClient注释。您还需要定义一个RSocketRequesterbean。
    @SpringBootApplication 
  • @EnableRSocketClients class RSocketClientApplication { 
  •  @Bean  RSocketRequester requester(RSocketRequester.Builder builder) { 
  •   return builder.connectTcp("localhost", 8888).block();  } 
    • 然后,定义一个 RSocket 客户端接口(类似于 FeignClient),如下所示:
    @RSocketClient 
  • interface GreetingClient {  @MessageMapping("request-response") 
  •  Mono requestResponse(Mono name); } 
    • 测试代码
    @SpringBootTest 
  • class DemoApplicationTests {  
  •  @Autowired  private GreetingClient greetingClient; 
  •   @Test 
  •  void testGreetingClient() {   Mono stringMono = greetingClient.requestResponse(Mono.just("lengleng")); 
  •   System.out.println(stringMono.block());  } 
  • spring-retrosocket github源码:https://github.com/spring-projects-experimental/spring-retrosocket

     

    转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/823699.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号