RSocket是用于字节流传输的二进制协议。它通过通过单个连接传递的异步消息来启用对称交互模型。spring-messaging
Spring框架的模块在客户端和服务器端都支持RSocket请求者和响应者。有关更多详细信息,请参见Spring Framework参考中的RSocket部分,其中包括RSocket协议的概述。
9.1 RSocket策略自动配置
Spring Boot自动配置一个RSocketStrategies
bean,该bean提供用于编码和解码RSocket有效负载的所有必需的基础结构。默认情况下,自动配置将尝试按顺序配置以下内容:
- Jackson的CBOR编解码器
- 杰克逊的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
spring.rsocket.server.mapping-path=/rsocket
spring.rsocket.server.transport=websocket
由于RSocket本身是使用该库构建的,因此只有Reactor Netty支持将RSocket插入Web服务器。 | |
---|---|
另外,RSocket TCP或Websocket服务器也可以作为独立的嵌入式服务器启动。除了依赖性要求之外,唯一需要的配置是为该服务器定义端口:
物产
Yaml
spring.rsocket.server.port=9898
9.3 Spring Messaging RSocket支持
Spring Boot将为RSocket自动配置Spring Messaging基础结构。
这意味着Spring Boot将创建一个RSocketMessageHandler
bean,该bean将处理对您的应用程序的RSocket请求。
9.4 使用RSocketRequester调用RSocket服务
一旦RSocket
在服务器和客户端之间建立了通道,任何一方都可以向另一方发送或接收请求。
作为服务器,您可以RSocketRequester
在RSocket的任何处理程序方法上注入实例@Controller
。作为客户端,您需要首先配置和建立RSocket连接。Spring Boot会RSocketRequester.Builder
使用预期的编解码器自动配置。
该RSocketRequester.Builder
实例是一个原型bean,这意味着每个注入点将为您提供一个新实例。这是有意为之的,因为此构建器是有状态的,因此您不应使用同一实例创建具有不同设置的请求者。
以下代码显示了一个典型示例:
@Service
public class MyService {
private final Mono<RSocketRequester> rsocketRequester;
public MyService(RSocketRequester.Builder rsocketRequesterBuilder) {
this.rsocketRequester = rsocketRequesterBuilder
.connectTcp("example.org", 9898).cache();
}
public Mono<User> someRSocketCall(String name) {
return this.rsocketRequester.flatMap(req ->
req.route("user").data(name).retrieveMono(User.class));
}
}