Spring WebFlux (6): RSocket 服务实现

article/2025/8/17 23:59:41

RSocket官网:https://rsocket.io/

RSocket是一种二进制协议,可用于字节流传输,例如TCP,WebSockets和Aeron。

提供了四中交互模式:

  • request/response (stream of 1) 请求/响应(单响应)大多数请求就是这种模式,仅1个响应的流,是在单个连接上多路复用的异步消息
  • request/stream (finite stream of many) 可以将其视为“集合”或“列表”响应,但不是将所有数据作为单个响应返回,而是按顺序流回每个元素。
  • fire-and-forget (no response) 无返回,在不需要响应时非常有用。它不仅可以通过跳过响应来节省网络使用量,而且可以在客户端和服务器处理时间内进行重大的性能优化,因为不需要簿记来等待和关联响应或取消请求。适用于可以有丢失的场景(非关键日子记录)
  • channel (bi-directional streams) 双向消息流,用于源数据更新,断开连接等,可以获取订阅更新后的差额而不是重新获取一遍
    在这里插入图片描述

它支持会话恢复,以允许跨不同的传输连接恢复长寿命的流。当网络连接频繁断开,切换和重新连接时,这对于移动服务器通信特别有用。

Springboot对RSocket进行了封装MessagingRSocket,通过Message进行传递,依赖如下:

implementation 'org.springframework.boot:spring-boot-starter-rsocket'

应用示例

简单实现rsocket连接示例,设置一个服务端一个客户端,服务端实现server接口提供服务,客户端接收服务端信息,并通过RESTful访问数据在浏览器中显示

1. 创建服务端

  • 简单实现一个记录温度的类
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
class Temperature {Long id;Double temperature;LocalDateTime time;public Temperature (long id) {this.id = id;this.temperature = ThreadLocalRandom.current().nextDouble(20.0,35.0);this.time = LocalDateTime.now();}
}
  • 实现一个服务接口
  • 注意标红处跟RESTful类controller写法的不同

在这里插入图片描述

  • 设置rsocket服务端口:
spring.rsocket.server.port=8081

2. 客户端配置

  • 温度容器类:
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
class Temperature {Long id;Double temperature;LocalDateTime time;
}
  • 连接接口:
interface Client {Flux<Temperature> temperature ();
}
  • 通过连接接口实现服务
@Service
@RequiredArgsConstructor
class RSocketClient implements Client {private final RSocketRequester rSocketRequester;public Flux<Temperature> temperature () {return rSocketRequester.route("server").retrieveFlux(Temperature.class);}
}
  • 通过RESTful controller调用服务
@RestController
@RequiredArgsConstructor
@RequestMapping("client")
class RSocketClientController {private final RSocketClient rSocketClient;@GetMapping(produces = MediaType.APPLICATION_STREAM_JSON_VALUE)public Flux<Temperature> temperature() {return rSocketClient.temperature();}
}
  • 配置访问路径:
@Configuration
class ClientConfiguration {@Beanpublic Client client (RSocketRequester rSocketRequester) {return new RSocketClient(rSocketRequester);}@Beanpublic RSocketRequester rSocketRequester (RSocketRequester.Builder builder) {return builder.connectTcp("localhost", 8081).block();}
}

3. 运行测试

  • 访问http://localhost:8090/client
  • rSocketClient连接connectTcp("localhost", 8081), 接收数据
  • 返回到浏览器

在这里插入图片描述

代码

server

github
gitee

client

github
gitee


http://chatgpt.dhexx.cn/article/qWTEJiC4.shtml

相关文章

HTTP协议的挑战者:RSocket

点击蓝色“程序猿DD”关注我 回复“资源”获取独家整理的学习资料&#xff01; 1. 简介 RSocket是一种二进制的点对点通信协议&#xff0c;是一种新的网络通信第七层协议。旨在用于分布式应用程序中。从这个意义上讲&#xff0c;RSocket是HTTP等其他协议的替代方案。它是一种基…

使用 RSocket——服务端主动调用客户端方法

1. 编写客户端接收请求的逻辑 我们可以在初始化 Rsocket 实例的时候指定客户端可以被调用的方法&#xff0c;使用 acceptor() 指定可被调用的方法和方法使用的通信模型类型&#xff1a; 通信类型为 RequestResponse 时&#xff1a; .acceptor(SocketAcceptor.forRequestRespo…

RSocket 与 gRPC性能对比

几乎每次我向观众介绍RSocket时&#xff0c;都会有人问这个问题&#xff1a;“ RSocket与gRPC相比如何&#xff1f;” 今天我们要找出答案。 搭建平台 插座 RSocket在应用程序网络上实现反应式语义。它是一种网络协议&#xff0c;可端对端实施反压力和其他反应流概念。 gR…

浅谈RSocket与响应式编程

简介&#xff1a; RSocket是高效一个二进制的网络通讯协议&#xff0c;能够满足很多场景下使用。另外&#xff0c;RSocket也是一个激进的响应式捍卫者&#xff0c;激进到连API都跟响应式无缝集成。本文我们将和大家分享RSocket与响应式编程。 作者 | 素渡 来源 | 阿里技术公众号…

阿里雷卷:RSocket从入门到落地,RSocket让AJP换发青春

考虑很久&#xff0c;决定还是写一下这篇文章&#xff0c;主要是 AJP 技术太老&#xff0c;我只能说 Long long ago &#xff0c;估计我在用这个技术的时候&#xff0c;很多同学小学还没有毕业。但是没有问题&#xff0c;这篇文章只是一个架构启发&#xff0c;不会浪费你时间让…

云原生实践之 RSocket 从入门到落地:Servlet vs RSocket

技术实践的作用在于&#xff1a;除了用于构建业务&#xff0c;也是为了验证某项技术或框架是否值得大规模推广。 本期开始&#xff0c;我们推出《RSocket 从入门到落地》系列文章&#xff0c;通过实例和对比来介绍RSocket。主要围绕RSocket如何实现Polyglot RPC、Service Regi…

RSocket 基于消息传递的反应式应用层网络协议

下面基于RSocket的一些主要特性分别做一下介绍&#xff0c;并和HTTP之类的常见协议进行比较&#xff1a; Multiplexed, Binary Protocol 多路复用的二进制协议Bidirectional Streaming 双向流Flow Control 流控制Socket Resumption 连接恢复Message passing 消息传递模型Trans…

RSocket 从入门到落地:两种微服务对比

✏️ Pic by Alibaba Tech on Facebook 技术实践的作用在于&#xff1a;除了用于构建业务&#xff0c;也是为了验证某项技术或框架是否值得大规模推广。 这是《RSocket 从入门到落地》系列文章的第三篇&#xff0c;来一起对比下开发微服务应用和微服务之间的网络通讯。该系列文…

开源的技术底座技术中台spring cloud Rsocket 微服务

一、项目背景 企业对新技术、用户体验、需求响应、交互协作提出了新的要求 1、应用新技术&#xff1a; 物联网、人工智能、大数据挖掘和分析、机器人、自动化等 2、重用核心能力&#xff1a; 使组织能够在其ERP核心解决方案的基础上进行构建&#xff0c;并为“下一步做什么”铺…

spring响应式编程13 RSocket:一种新的高性能网络通信协议

前面几讲我们讨论了如何使用 WebFlux 构建响应式 Web 服务的实现方案。WebFlux 和 WebMVC 一样&#xff0c;都是基于 HTTP 协议实现请求-响应式的交互方式。这种交互方案很简单&#xff0c;但不够灵活&#xff0c;也无法应对所有的响应式应用场景。那么&#xff0c;有没有在网络…

RSocket 学习(二):HTTP VS WebSocket VS RSocket

在比对 HTTP、WebSocket、RSocket 之前&#xff0c;我们先通过下面这张 OSI 七层模型的图快速梳理一下网络通信的面貌&#xff0c; 以便后续更好地理解它们。 osi model.png 一. HTTP 的特性 超文本传输协议&#xff08;英语&#xff1a;HyperText Transfer Protocol&#xff0…

基于RSocket协议实现客户端与服务端通信

RSocket基础开发demo package com.pshdhx.rsocket;import io.rsocket.Payload; import io.rsocket.RSocket; import io.rsocket.util.DefaultPayload; import lombok.extern.slf4j.Slf4j; import org.reactivestreams.Publisher; import reactor.core.publisher.Flux; import …

响应式编程之网络新约:RSocket

响应式reactive是Java中高效应用的下一个前沿&#xff0c;但它目前主要有两个障碍&#xff1a;数据访问和网络。RSocket是一种新的第7层语言无关的应用网络协议&#xff08;解决后者&#xff09;&#xff0c;它由Facebook&#xff0c;Netifi和Pivotal等工程师开发&#xff0c;提…

一篇文章了解RSocket协议

RSocket是一个类似于HTTP的通讯协议。在了解Rsocket协议之前&#xff0c;先简单介绍下HTTP协议。 之所以推出springboot的技术&#xff0c;一个原因是因为前后端设计的分离。因为基于HTTP协议可以直接返回REST数据内容。 REST是一个简单且容易使用的异构处理架构&#xff0c;R…

RSocket 学习(一):初探

girl.jpg 一. RSocket 介绍 RSocket 是一种二进制字节流传输协议&#xff0c;位于 OSI 七层模型中的5、6层&#xff0c;对应 TCP/IP 模型中的应用层。RSocket 并没有规定必须使用何种底层传输层协议&#xff0c;开发者可以使用不同的底层传输协议&#xff0c;包括 TCP、WebSock…

RSocket——Http协议的替代者

1. 简介 RSocket是一种二进制的点对点通信协议&#xff0c;是一种新的网络通信第七层协议。旨在用于分布式应用程序中。从这个意义上讲&#xff0c;RSocket是HTTP等其他协议的替代方案。它是一种基于Reactive Streams规范具有异步&#xff0c;背压的双向&#xff0c;多路复用&…

java-语言学习-eclipse安装java汉化包

java的汉化&#xff1a; 1.打开链接&#xff1a;https://www.eclipse.org/babel/ 2.进入网页后&#xff0c;往下翻一点&#xff0c;看到一个download&#xff08;下图红框所示&#xff09;&#xff0c;点开。 3.进入一个页面后&#xff0c;往下翻一点点&#xff0c;看到有几…

安装Eclipse的中文语言包

安装Eclipse的中文语言包 下载语言包 1、进入网址 http://www.eclipse.org/babel 2、对应版本下载中文语言包 3、替换Eclipse软件安装文件的features、plugins&#xff0c;再次启动加载 4、替换出现The Eclipse executable launcher was unable to locate its companion l…

Eclipse 官方简体中文语言包下载地址及安装方法

转自: http://www.cnblogs.com/yaotong/archive/2011/12/28/2305421.html 打开Eclipse Babel Project 主页: http://www.eclipse.org/babel/downloads.php 根据Eclipse的版本找到相应的插件地址&#xff0c;复制下来。 进入Eclipse&#xff0c;选择Help->Install New Softwa…

Eclipse-中文语言包

Eclipse-中文语言包 效果图 版本使用中文语言包 下载过程 点击如下 打开插件市场 填写链接 填写此链接地址https://download.eclipse.org/technology/babel/update-site/latest/到下图 简体中文选择 简体中文选择 选择允许协议 安装代码提示插件codota 是什么 打开插件市场 搜…