RSocket是用于字节流传输的二进制协议。它通过通过单个连接传递的异步消息来启用对称交互模型。
spring-messagingSpring框架的模块在客户端和服务器端都支持RSocket请求者和响应者。有关更多详细信息,请参见Spring Framework参考中的RSocket部分,其中包括RSocket协议的概述。

9.1 RSocket策略自动配置

Spring Boot自动配置一个RSocketStrategiesbean,该bean提供用于编码和解码RSocket有效负载的所有必需的基础结构。默认情况下,自动配置将尝试按顺序配置以下内容:

  1. Jackson的CBOR编解码器
  2. 杰克逊的JSON编解码器

spring-boot-starter-rsocket启动同时提供的依赖。查阅Jackson支持部分,以了解有关定制可能性的更多信息。
开发人员可以RSocketStrategies通过创建实现该RSocketStrategiesCustomizer接口的bean来自定义组件。请注意,它们@Order很重要,因为它确定编解码器的顺序。

9.2 RSocket服务器自动配置

Spring Boot提供了RSocket服务器自动配置。所需的依赖项由提供spring-boot-starter-rsocket
Spring Boot允许通过WebFlux服务器通过WebSocket公开RSocket,或支持独立的RSocket服务器。这取决于应用程序的类型及其配置。
对于WebFlux应用程序(即类型WebApplicationType.REACTIVE),仅当以下属性匹配时,RSocket服务器才会插入Web服务器:
物产
Yaml

  1. spring.rsocket.server.mapping-path=/rsocket
  2. spring.rsocket.server.transport=websocket
由于RSocket本身是使用该库构建的,因此只有Reactor Netty支持将RSocket插入Web服务器。

另外,RSocket TCP或Websocket服务器也可以作为独立的嵌入式服务器启动。除了依赖性要求之外,唯一需要的配置是为该服务器定义端口:
物产
Yaml

  1. spring.rsocket.server.port=9898

9.3 Spring Messaging RSocket支持

Spring Boot将为RSocket自动配置Spring Messaging基础结构。
这意味着Spring Boot将创建一个RSocketMessageHandlerbean,该bean将处理对您的应用程序的RSocket请求。

9.4 使用RSocketRequester调用RSocket服务

一旦RSocket在服务器和客户端之间建立了通道,任何一方都可以向另一方发送或接收请求。
作为服务器,您可以RSocketRequester在RSocket的任何处理程序方法上注入实例@Controller。作为客户端,您需要首先配置和建立RSocket连接。Spring Boot会RSocketRequester.Builder使用预期的编解码器自动配置。
RSocketRequester.Builder实例是一个原型bean,这意味着每个注入点将为您提供一个新实例。这是有意为之的,因为此构建器是有状态的,因此您不应使用同一实例创建具有不同设置的请求者。
以下代码显示了一个典型示例:

  1. @Service
  2. public class MyService {
  3. private final Mono<RSocketRequester> rsocketRequester;
  4. public MyService(RSocketRequester.Builder rsocketRequesterBuilder) {
  5. this.rsocketRequester = rsocketRequesterBuilder
  6. .connectTcp("example.org", 9898).cache();
  7. }
  8. public Mono<User> someRSocketCall(String name) {
  9. return this.rsocketRequester.flatMap(req ->
  10. req.route("user").data(name).retrieveMono(User.class));
  11. }
  12. }