SpringBoot创建RSocket服务器的全过程记录

论坛 期权论坛 脚本     
niminba   2021-5-23 05:21   846   0

前言

在微服务的多样化世界中,HTTP是代理到代理通信中无可争议的领导者。它成熟,无处不在。但在某些情况下,HTTP请求-响应可能很麻烦。如果您需要传统请求-响应之外的通信模式,如fire-and-forget或streaming,该怎么办?如果你想向任何一个方向发送信息呢?

有了HTTP,有很多方法可以实现这一点,但这不是构建协议的目的。许多解决方案都带有额外的权衡或缺点。另外,这里没有规则手册说“你应该一直使用HTTP”,像AMQP这样的消息传递协议已经证明了这一点。所以,知道你的选择是什么是好的,每隔一段时间在你的列表中添加一些新技术也是健康的。这篇文章是关于一个这样的替代RSocket。

RSocket是一种新的消息传递协议,旨在解决一些常见的微服务通信难题。使用RSocket,您可以获得一个在TCP或WebSockets上工作的灵活协议。这意味着您可以在不进行转换的情况下处理二进制消息。您可以使用诸如多路复用、背压、恢复和路由等现代控件,还可以使用多种消息传递模式,包括启动和忘记、请求-响应和流式传输。RSocket也是完全反应的,因此它非常适合于高吞吐量的微服务应用程序。早期采用者包括Netflix、Pivotal、阿里巴巴和Facebook,它们都是提供可伸缩互联网服务的专家。

由于请求-响应是大多数web开发人员熟悉的基础,因此我们将以这种模式开始我们的RSocket之旅。请求-响应的语义相当简单,您发送一个请求,就得到一个响应。HTTP是建立在这个基本的交互之上的,它非常常见。

在本文中,您将了解如何使用RSocket,使用Spring Boot作为服务器,使用终端应用程序作为客户机来执行请求响应。

请求-响应Request-response只是Spring和RSocket支持的四种交互模型之一。

当您按照下面的步骤操作时,您会注意到使用springboot构建RSocket服务器所需的代码量非常少。这里已经为您提供了代码,但是您也可以在几分钟内自己从头开始编写代码。

步骤1:设置环境

首先,检查是否安装了以下必备组件:

  • Java8或更高版本的JavaSDK(要检查,请在终端使用Java-version)
  • 一个工作的javaide(我正在使用IntelliJ IDEA)
  • 包含克隆或提取的演示代码示例的文件夹。
  • Linux Bash/ZSH shell(如果您是Windows用户,请查看下面的注释)

如果您是Windows用户,请切换到Microsoft针对Linux的Windows子系统。

现在,将下载的项目文件夹设置为终端中的当前目录:

cd spring-rsocket-demo

在终端中,下载JAR文件如下:

cd rsocket-server
wget -O rsc.jar https://github.com/making/rsc/releases/download/0.4.2/rsc-0.4.2.jar

稍后您将使用此客户机与RSocket服务器进行对话,但现在,通过如下方式调用help命令来测试它是否正常工作:

java -jar rsc.jar --help

您应该会看到下面这样的一些输出(我已经截断了),解释了命令的用法和选项。

usage: rsc Uri [Options]

Non-option arguments:
[String: Uri]

Option                              Description
------                              -----------
--channel                           Shortcut of --im REQUEST_CHANNEL
-d, --data [String]                 Data. Use '-' to read data from

...

把这个终端窗口开着,你以后会需要的。

步骤2:检查服务器代码

在IDE中打开rsocket服务器项目并检查代码。如您所见,在springboot中支持RSocket服务器所需的代码非常少。以下是一些亮点:

项目文件

在项目的pom.xml文件中,您可以看到Spring Boot RSocket服务器所需的<dependencies>。之所以使用SpringBootVersion2.2.5.RELEASE,是因为在撰写本文时,该版本具有最适合生产的RSocket特性。该项目还依赖于lombok和springbootstartersocket库。Lombok为Java数据类添加了构造函数、getter、setter和equals,还简化了对日志等内容的访问。RSocket的springbootstarter将RSocket与springboot集成在一起,并在运行时自动为您配置一些RSocket基础设施。

应用程序属性

在application.properties文件中,RSocket服务器的TCP端口被设置为7000,Spring Boot的延迟初始化功能被打开。

spring.rsocket.server.port=7000
spring.main.lazy-initialization=true

消息类

第一个更详细的类叫做Message.java。这个Lombok@Data类用于对客户机和服务器(或者“requester”和“responder”,如果您愿意的话)之间Ч&%6W'fW""&7F%&W7"#7&VFVB#S##C#&SУFcУyXyN>X{*XnhKK( hh.zKKkhhj~FFF8.YiKZXXiXYyNz>i[h~k"8N.zK~iZ~iX{iXYyNi[hkhhK4~zK..zK[~iiXY{Z~iyNY8NkhhK4~zK.#УiYh*XyXiziXYyD4yNY8N*Xx>XX{iNhKNYNkhhiXYhXnY(NУb673&66У&R673''W6f#Ч&%6W'fW""&7F%&W7"#7&VFVB#S##C#&SУFcУXXKyJ%6NXKnKi8NkhhYX {z>K7G&>hnX[>z6NiXYiX%6NiXY8.Zh.i*KyJD^%6NiXYXyJ [yNik[XD^KN8#У3^KXc#У3УKyE%6B'6>Z~z%6Nkhh.X %6D6.XkhhhuD5XXF76siXYjYz[NK{8#УzKkhhkhhhKN8.jz~KNKyJ4Z~z&nK&WVW7BW78%7&yJzhhjzD76vT^>yJ&WVW7E&W776vRWVW7Nk9^8.xKnYk9^yJz[{yNkhh8N8$4Z~i[n{z>KNi[NKKNK.h>XKK{;X~khh#У.i*{~{Xh*KXKyJ7&XiKKzyE%6NiXYiZ>8#УYG3&#"F7F'FVBF6B&&6W'fW#У3{33УjX[>K&[%6NiXYyNih~z[ K{NZIyX[57&[%6NiXYXh^Z{J.zKK^XNih~zhn{~{XyNyX[>ih~z[ZJ~Z^YZIiJ

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP