Introduction
RSocket是一种二进制协议,可用于字节流传输,例如TCP,WebSockets和Aeron。
它通过通过单个连接传递的异步消息来启用以下对称交互模型:
- 请求/响应(1个流)请求/流(有限的流)一劳永逸(无回应)事件订阅(无限多)
它支持会话恢复,以允许跨不同的传输连接恢复长寿命的流。 当网络连接频繁断开,切换和重新连接时,这对于移动服务器通信特别有用。
在我们的教程中,我们将使用Java编程语言实现RSocket。
Why Springboot
尽管我可以使用简单的Java应用程序简单地实现RSocket,但我选择Springboot是因为它是JVM语言生态系统上的一个庞大项目。 Springboot还没有RSocket的稳定版本,但这不应该阻止我们尝试它。
Structure
我们的项目将包含两个子项目。 的消费者,谁将处理请求,制片人,谁将提供消费者与数据。
Getting Started
If you want to easily get started with a Springboot project I recommend always using the Spring 一世nitializr.
Configuring Gradle
首先,我们必须配置build.gradle并包括Springboot的rsocket-starter-dependency:
为了消费者我们还应该包括react-web-starter依赖项,因为我们想以某种方式显示从制片人。
Configuration
现在让我们动手,写一些代码。
Producer
首先,我们必须配置我们的端口制片人接收新的连接:
的spring.rsocket.server.port = 7000配置RSocket以开始侦听端口7000,并且spring.main.lazy-initialization = true是为了确保Springboot将延迟初始化其bean。
Consumer
现在,在这里,我们通过创建两个来配置插座客户端豆子类型插座和插座Requester。 的插座 bean用于创建与制片人。 的插座Requester bean就像我们的网络客户端(如果我们使用的是Reactive)或RestTemplate(如果我们使用的是MVC),他将向制片人。
The Actual Code
我们的两个应用程序(制片人和消费者)将使用以下域对象进行通信:
Simple Communication
让我们从一个简单的示例开始,一个带有单个Response的简单Request。
Producer
如果您曾经在Spring Boot中使用过WebSockets@MessageMapping注释应该很熟悉。 在这里,随着@MessageMapping(“问候”)我们指定路线“ greet”,该路线会收到一个问候请求并返回一个对象问候回应作为回应。
Consumer
在这里我们看到一个简单的@RestController注入RSocketRequester(我们之前配置的)并使用他执行请求。 如您所见,我们告诉请求者向“打招呼”路线(我们之前在制片人)。
Communication with Stream
使用RSocket交付数据流是很自然的,而且无需花费太多精力。
Producer
As you see in the gist above, we configured our @MessageMapping
as before, but now we return a Flux (don't know what Mono and Flux are? Check this StackOverflow post).
我们也使用.delayElements()模拟我们的响应之间的延迟的方法。
Consumer
从我们的其他请求到制片人,显然。route(“ greet-stream”)。 但是如果您仔细看,现在我们的@GetMapping产生一个文字/事件流而不是默认值应用程序/ json。
让我们检查结果!
Closing thoughts
就是这样! 希望我为您提供了有关如何使用新RSocket协议的清晰解释!
您可以在这里找到项目:
Springboot RSocket
This project aims to give an idea on how to work with the RSocket protocol with the Springboot framework.
Getting started
./gradlew :producer:bootRun
./gradlew :consumer:bootRun
Navigate to:
http://localhost:8080/greet/{YourName}
http://localhost:8080/greet-stream/{YourName}
For more, check my getting started guide here: https://dev.to/petros0/getting-started-with-rsocket-in-springboot-5889.
感谢您阅读并玩得开心!
Resources
- RSocket
- SpringTips from Josh