Spring Boot中的RSocket入门

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。

让我们检查结果!

Spring Boot中的RSocket入门_第1张图片

Closing thoughts

就是这样! 希望我为您提供了有关如何使用新RSocket协议的清晰解释!

您可以在这里找到项目:

Spring Boot中的RSocket入门_第2张图片 Petros0 / springboot-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.


View on GitHub


感谢您阅读并玩得开心!

Resources

  • RSocket
  • SpringTips from Josh

from: https://dev.to//petros0/getting-started-with-rsocket-in-springboot-5889

你可能感兴趣的:(Spring Boot中的RSocket入门)