弹簧引导中使用RSocket的示例代码

  

  

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的示例代码