最新实战案例锦集:《Spring Boot3实战案例合集》持续更新,每天至少更新一篇文章,订阅后将赠送文章最后展示的所有MD文档(学习笔记)。
环境:Spring Boot3.2.5
1. 简介
本篇文章将介绍与RSocket在Spring Boot中应用的相关知识,如果你对RSocket还不了解的,可以查看下面这篇文章
从Spring 6和Spring Boot 3开始,类似于其他声明式客户端(如OpenFeign和Retrofit),Spring框架支持将RSocket服务创建为一个Java接口,其中使用注解的方法用于RSocket交互。接下来我将使用@RSocketExchange来创建一个用于RSocket协议的声明式请求者客户端。
一个声明式HTTP接口是一个Java接口,它有助于减少样板代码,生成实现该接口的代理,并在框架级别执行交互。
2. 实战案例
2.1 依赖管理
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-rsocket</artifactId></dependency>
该starter中包含所有必要的类和接口。
2.2 使用@RSocketExchange
@RSocketExchange注解用于在RSocket服务接口上声明一个方法作为RSocket端点。它接受一个value参数,该参数定义了端点路由。与用于HTTP传输的@RequestMapping类似,@RSocketExchange可以在接口级别使用,以表达一个公共路由,该路由将被所有服务方法继承。
public interface MessageService {("message")public Mono<String> sendMessage(Mono<String> requestObject);}
服务方法可以接受以下方法参数:
@DestinationVariable: 添加路由变量,将模板占位符扩展到路由中。
@Payload:可选注解,用于设置请求的输入有效载荷。
Object,然后是 MimeType:发送输入有效载荷中的附加元数据项及其 MIME 类型。
public interface MessageService {("message/{name}")public Mono<String> sendMessage(("name") String name,Mono<String> content) ;}
Spring底层会生成一个实现 MessageService 接口的代理,并使用底层的 RSocketRequester 进行交互。
2.3 生成服务代理
众所周知,Spring Boot自动配置会为我们自动配置RSocketRequester.Builder。我们可以使用这个构建器来创建RSocketRequester。
public class RSocketComponent {private final RSocketRequester.Builder requesterBuilder;public RSocketComponent(RSocketRequester.Builder requesterBuilder) {this.requesterBuilder = requesterBuilder ;}public void initRSocket() {RSocketRequester rsocketRequester = requesterBuilder.tcp("localhost", 7000);}}
接下来,我们可以使用 RSocketRequester 来初始化一个 RSocketServiceProxyFactory,最终用于为任何带有 @RSocketExchange 方法的 RSocket 服务接口创建客户端代理。
RSocketServiceProxyFactory factory = RSocketServiceProxyFactory.builder(rsocketRequester).build() ;MessageService messageService = factory.createClient(MessageService.class) ;
这里就得到了MessageService服务对象,接下来就可以进行服务调用的测试了。
针对RSocket服务端,我这里打算还是使用下面这篇文章中的服务端程序
在RSocketComponent中添加如下方法,执行服务端接口调用
public Mono<String> message(Mono<String> requestObject) {return this.service.sendMessage(requestObject) ;}
接下来,我们就可以进行测试
2.4 测试
这里,通过Controller接口进行测试
public class MessageController {private final RSocketComponent rc ;public MessageController(RSocketComponent rc) {this.rc = rc ;}public String msg(String msg) {return this.rc.message(Mono.just(msg)).block() ;}}


服务端控制台输出
接收到消息:Hello接收到消息:Pack
测试通过;与Spring6之前版本相比较通过@RSocketExchange注解简化了我们客户端调用RSocket服务。其实,这种方式与Spring6中的@HttpExchange的使用及原理差不多。
以上是本篇文章的全部内容,如对你有帮助帮忙点赞+转发+收藏
推荐文章
SpringBoot强大的分布式锁组件Lock4j,支持多种实现
玩转Redis!非常强大的Redisson分布式集合,少写60%代码
你的项目中是否运用了@ResponseStatus注解?你真的会用?





