RSocket应用层协议支持,反应流语义,例如:用RSocket作为HTTP的一种替代方案。在本教程中,我们将看到,RSocket用在春天引导中,特别是弹簧引导如何帮助抽象出更低级别的RSocket API。
让我们从添加,spring-boot-starter-rsocket依赖开始:
& lt; dependency> & lt; groupId> org.springframework.boot & lt; artifactId> spring-boot-starter-rsocket & lt;/dependency> >之前这个依赖会传递性的拉取,RSocket相关的依赖,比如:,rsocket-core和,rsocket-transport-netty
现在继续我们的简单应用程序。为了突出,RSocket提供的交互模式,我打算创建一个交易应用程序,交易应用程序包括客户端和服务器。
<强> 3.1。服务器设置强>
首先,我们设置由springboot应用程序引导的,RSocket服务器服务器。因为有,spring-boot-starter-rsocket依赖依赖,所以springboot会自动配置,RSocket服务器。跟平常一样,可以用属性驱动的方式修改,RSocket服务器默认配置值。例如:通过增加如下配置在,应用程序。属性中,来修改,RSocket端口
spring.rsocket.server.port=7000也可以根据需要进一步修改服务器的其他属性
<强> 3.2。设置客户端强>
接下来,我们来设置客户端,也是一个springboot应用程序。虽然springboot自动配置大部分RSocket相关的组件,但还要自定义一些对象来完成设置。
@ configuration 公开课ClientConfiguration { @ bean 公共RSocket RSocket () { 返回RSocketFactory .connect () .mimeType (MimeTypeUtils。APPLICATION_JSON_VALUE MimeTypeUtils.APPLICATION_JSON_VALUE) .frameDecoder (PayloadDecoder.ZERO_COPY) .transport (TcpClientTransport.create (7000)) .start () .block (); } @ bean RSocketRequester RSocketRequester (RSocketStrategies RSocketStrategies) { MimeTypeUtils返回RSocketRequester.wrap (rSocket ()。APPLICATION_JSON rSocketStrategies); } } >之前这儿我们正在创建,RSocket客户端并且配置TCP端口为:7000。注意:该服务端口我们在前面已经配置过。接下来我们定义了一个RSocket的装饰器对象,RSocketRequester。这个对象在我们跟,RSocket服务器交互时会为我们提供帮助。定义这些对象配置后,我们还只是有了一个骨架。在接下来,我们将暴露不同的交互模式,并看看springboot在这个地方提供帮助的。
我们从,请求/响应开始,,HTTP也使用这种通信方式,这也是最常见的,最相似的交互模式。在这种交互模式里,由客户端初始化通信并发送一个请求。之后,服务器端执行操作并返回一个响应给客户端——这时通信完成。在我们的交易应用程序里,一个客户端询问一个给定的股票的当前的市场数据。作为回复,服务器会传递请求的数据。
<强> 4.1。服务器强>
在服务器这边,我们首先应该创建一个,控制器来持有我们的处理器方法。我们会使用,@MessageMapping注解来代替像SpringMVC中的,@RequestMapping或者,@GetMapping注解
@ controller 公开课MarketDataRSocketController { 私人最终MarketDataRepository MarketDataRepository; 公共MarketDataRSocketController (MarketDataRepository MarketDataRepository) { 这一点。marketDataRepository=marketDataRepository; } @MessageMapping (“currentMarketData”) 公共MonocurrentMarketData (MarketDataRequest MarketDataRequest) { 返回marketDataRepository.getOne (marketDataRequest.getStock ()); } } >之前 来研究下我们的控制器。我们将使用,@ controller注解来定义一个控制器来处理进入RSocket的请求。另外,注解,@MessageMapping让我们定义我们感兴趣的路由和如何响应一个请求。在这个示例中,服务器监听路由,currentMarketData,并响应一个单一的结果,Mono
给客户端。 <强> 4.2。客户端强>
接下来,我们的RSocket客户端应该询问一只股票的价格并得到一个单一的响应。为了初始化请求,我们该使用,RSocketRequester类,如下:
@RestController 公开课MarketDataRestController { 私人最终RSocketRequester RSocketRequester; 公共MarketDataRestController (RSocketRequester RSocketRequester) { 这一点。rSocketRequester=rSocketRequester; } @GetMapping (value=" https://www.yisu.com/current/{股票}”) 公共Publisher弹簧引导中使用RSocket的示例代码