这期内容当中小编将会给大家带来有关怎么在SpringBoot中创建一个RSocket服务器,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
首先,检查是否安装了以下必备组件:
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 ...
把这个终端窗口开着,你以后会需要的。
在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”,如果您愿意的话)之间的请求和响应消息进行建模。这个类看起来像这样…
@Data @AllArgsConstructor @NoArgsConstructor public class Message { private String origin; private String interaction; private long index; private long created = Instant.now().getEpochSecond(); public Message(String origin, String interaction) { this.origin = origin; this.interaction = interaction; this.index = 0; } public Message(String origin, String interaction, long index) { this.origin = origin; this.interaction = interaction; this.index = index; } }
使用这个类,您可以说一条消息来自何处(它的来源),它打算使用哪种消息传递样式(交互),以及消息序列中的序列号(它的索引)。Lombok通过提供构造函数、getter、setter、toString和hashcode实现来简化代码。
控制器类
RSocket服务器控制器代码可以在RSocketController.java文件中找到。这个类被注释为Spring@Controller,这本质上意味着它声明了服务端点(在本例中为RSocket endpoints)。
@Controller public class RSocketController { @MessageMapping("request-response") Message requestResponse(Message request) { log.info("Received request-response request: {}", request); // create a single Message and return it return new Message(SERVER, RESPONSE); } }
在类中,有一个名为requestResponse()的方法,它接受单个消息对象(请求)并返回单个消息对象(响应)。
您会注意到,这个requestResponse()方法用@MessageMapping(“request-response”)注释修饰。此注释声明任何包含请求-响应的RSocket路由的元数据的消息都应该由此方法处理。稍后从客户端发送请求消息时,您将使用此路由。
你注意到这和Spring的REST控制器有什么不同吗?对于REST控制器,URL路径映射(如/hello)用于将HTTP调用与其处理程序方法相关联。
这就是代码。我们试试看。
在第二个终端窗口中,保持现有终端窗口处于打开状态,将rsocket server文件夹设置为当前目录。然后使用以下命令构建并运行RSocket服务器:
./mvnw clean package spring-boot:run -DskipTests=true
或者,如果愿意的话,可以在javaide中使用“Build”和“Run”命令。
接下来,您将使用在步骤1中下载并测试的RSocket client rsc.jar向正在运行的服务器发送一条消息。返回到原来的终端窗口,在那里有--help文本并发出以下命令:
java -jar rsc.jar --debug --request --data "{\"origin\":\"Client\",\"interaction\":\"Request\"}" --route request-response tcp://localhost:7000
您将注意到该命令声明了一个RSocket消息路由(这是通过添加--route选项并指定路由的名称来实现的)。在本例中,路由是请求-响应,它与RSocketController.java中请求-响应处理程序方法中声明的@MessageMapping匹配。
当命令运行时,您将在终端窗口中看到一些调试信息,解释在请求-响应交互期间发生的事情。它看起来像这样:
2020-02-27 11:20:21.806 DEBUG --- [actor-tcp-nio-1] i.r.FrameLogger : sending -> Frame => Stream ID: 1 Type: REQUEST_RESPONSE Flags: 0b100000000 Length: 69 Metadata: +-------------------------------------------------+ | 0 1 2 3 4 5 6 7 8 9 a b c d e f | +--------+-------------------------------------------------+----------------+ |00000000| 10 72 65 71 75 65 73 74 2d 72 65 73 70 6f 6e 73 |.request-respons| |00000010| 65 |e | +--------+-------------------------------------------------+----------------+ Data: +-------------------------------------------------+ | 0 1 2 3 4 5 6 7 8 9 a b c d e f | +--------+-------------------------------------------------+----------------+ |00000000| 7b 22 6f 72 69 67 69 6e 22 3a 22 43 6c 69 65 6e |{"origin":"Clien| |00000010| 74 22 2c 22 69 6e 74 65 72 61 63 74 69 6f 6e 22 |t","interaction"| |00000020| 3a 22 52 65 71 75 65 73 74 22 7d |:"Request"} | +--------+-------------------------------------------------+----------------+ 2020-02-27 11:20:21.927 DEBUG --- [actor-tcp-nio-1] i.r.FrameLogger : receiving -> Frame => Stream ID: 1 Type: NEXT_COMPLETE Flags: 0b1100000 Length: 81 Data: +-------------------------------------------------+ | 0 1 2 3 4 5 6 7 8 9 a b c d e f | +--------+-------------------------------------------------+----------------+ |00000000| 7b 22 6f 72 69 67 69 6e 22 3a 22 53 65 72 76 65 |{"origin":"Serve| |00000010| 72 22 2c 22 69 6e 74 65 72 61 63 74 69 6f 6e 22 |r","interaction"| |00000020| 3a 22 52 65 73 70 6f 6e 73 65 22 2c 22 69 6e 64 |:"Response","ind| |00000030| 65 78 22 3a 30 2c 22 63 72 65 61 74 65 64 22 3a |ex":0,"created":| |00000040| 31 35 38 32 38 30 32 34 32 31 7d |1582802421} | +--------+-------------------------------------------------+----------------+ {"origin":"Server","interaction":"Response","index":0,"created":1582802421}
您看到的调试输出被分成三个“消息帧”。第一个消息帧被标记为Metadata。在本例中,它显示发送到服务器的路由元数据(请求-响应)。第二帧显示客户机发送给服务器的数据消息(一个JSON字符串)。第三帧显示服务器返回给客户机的响应消息(也是一个JSON字符串)。
在最后一行,您可以看到来自服务器的JSON格式的响应被单独打印出来,确认我们的命令消息已被服务器成功接收和确认:
{"origin":"Server","interaction":"Response","index":0,"created":1582802421}
oot创建RSocket服务器内容请搜索亿速云以前的文章或继续浏览下面的相关文章希望大家以后多多支持亿速云!
springboot一种全新的编程规范,其设计目的是用来简化新Spring应用的初始搭建以及开发过程,SpringBoot也是一个服务于框架的框架,服务范围是简化配置文件。
上述就是小编为大家分享的怎么在SpringBoot中创建一个RSocket服务器了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。