本文介绍如何使用带有Spring Boot的RSocket。
什么是RSocket?
RSocket 是一种双向消息驱动的通信协议。是超越标准的请求/响应模型的高级通信流程。您可以使用单个消息、消息流或无响应实现响应。RSocket允许您使用以下传输协议进行客户端和服务器端的通信:
如果您想了解更多信息,可以观看Ben Hale 在Spring I / 0 2019年的 演讲 。
RSocket TCP服务器
RSocket服务器是整个项目中最简单的部分。您需要做的就是转到 Spring Initializr 并选择Spring Boot,至少是版本2.2.0.M4。然后,选择RSocket作为依赖项。
要使用TCP协议配置RSocket服务器,请添加下行到application.properties。此配置将在端口7000处打开RSocket。
spring.rsocket.server.transport=tcp spring.rsocket.server.port=7000
最后一步是添加一些控制器,您已准备好使用服务器。
@Controller <b>class</b> ServerController { @MessageMapping(<font>"queue"</font><font>) fun helloQueue(incomingMessage: Message): Mono<Message> = Mono.just(Message(</font><font>"Hello ${incomingMessage.message}"</font><font>)) } data <b>class</b> Message(val message: String) </font>
RSocket TCP客户端
客户端应用程序非常相似。转到 Spring Initializr 并用RSocket和引导它Spring Reactive Web。
要通过TCP端口7000与RSocket通信,您需要创建一个RSocketRequester。对于TCP协议,它看起来像这样。
@Configuration <b>class</b> ClientConfiguration { @Bean internal fun rSocketRequester(rSocketStrategies: RSocketStrategies): RSocketRequester = RSocketRequester.builder() .rsocketStrategies(rSocketStrategies) .connect(TcpClientTransport.create(7000)) .block()!! }
客户端应用程序可以是使用HTTP的标准响应式Web应用程序。要测试与已配置服务器的通信,请添加以下端点。
@RestController <b>class</b> ClientController(<b>private</b> val rSocketRequester: RSocketRequester) { @GetMapping(<font>"/hello/{name}"</font><font>) fun hello(@PathVariable(</font><font>"name"</font><font>) name: String): Mono<String> = rSocketRequester.route(</font><font>"queue"</font><font>) .data(Message(name)) .retrieveMono(Message::<b>class</b>.java) .map { it.message } } data <b>class</b> Message(val message: String) </font>
RSocket WebSocket服务器
如果你想使用RScoket的WebSocket,那么需添加依赖Spring Reactive Web,这样Rsocket端口和Web端口一样,不再使用配置中端口,呢需要定义RScoket的映射端点,比如这里使用/rsocket,在application.properties配置:
spring.rsocket.server.transport=websocket spring.rsocket.server.mapping-path=/rsocket
你之前为TCP服务器配置的控制器就无需改变。
RSocket WebSocket客户端
如果你的服务器已经配置了端口8080,在application.properties改变客户端端口:
server.port=8081
为WebSocket传输协议配置客户端,类似之前TCP协议一样:
@Configuration <b>class</b> ClientConfiguration { @Bean internal fun rSocketRequester(rSocketStrategies: RSocketStrategies): RSocketRequester { val uri = URI.create(<font>"ws://localhost:8080/rsocket"</font><font>) <b>return</b> RSocketRequester.builder() .rsocketStrategies(rSocketStrategies) .connect(WebsocketClientTransport.create(uri)) .block()!! } } </font>
之前为TCP创建的控制器不需改变。
Spring Boot使创建使用RSocket的应用程序变得简单。我希望这些例子告诉你如何做到这一点。版本2.2.0.M4尚未准备好生产,但您可以在您的反应式应用程序中试用它。