自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Spring Boot3新特性@RSocketExchange輕松實現(xiàn)消息實時推送

開發(fā) 前端
與Spring6之前版本相比較通過@RSocketExchange注解簡化了我們客戶端調(diào)用RSocket服務。其實,這種方式與Spring6中的@HttpExchange的使用及原理差不多。?

環(huán)境:Spring Boot3.2.5

1. 簡介

本篇文章將介紹與RSocket在Spring Boot中應用的相關知識,如果你對RSocket還不了解的,可以查看下面這篇文章

SpringBoot整合RSocket實時數(shù)據(jù)通信

從Spring 6和Spring Boot 3開始,類似于其他聲明式客戶端(如OpenFeign和Retrofit),Spring框架支持將RSocket服務創(chuàng)建為一個Java接口,其中使用注解的方法用于RSocket交互。接下來我將使用@RSocketExchange來創(chuàng)建一個用于RSocket協(xié)議的聲明式請求者客戶端。

一個聲明式HTTP接口是一個Java接口,它有助于減少樣板代碼,生成實現(xiàn)該接口的代理,并在框架級別執(zhí)行交互。

2. 實戰(zhàn)案例

2.1 依賴管理

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-rsocket</artifactId>
</dependency>

該starter中包含所有必要的類和接口。

2.2 使用@RSocketExchange

@RSocketExchange注解用于在RSocket服務接口上聲明一個方法作為RSocket端點。它接受一個value參數(shù),該參數(shù)定義了端點路由。與用于HTTP傳輸?shù)腀RequestMapping類似,@RSocketExchange可以在接口級別使用,以表達一個公共路由,該路由將被所有服務方法繼承。

public interface MessageService {
  
  @RSocketExchange("message")
  public Mono<String> sendMessage(Mono<String> requestObject);
}

服務方法可以接受以下方法參數(shù):

  • @DestinationVariable: 添加路由變量,將模板占位符擴展到路由中。
  • @Payload:可選注解,用于設置請求的輸入有效載荷。
  • Object,然后是 MimeType:發(fā)送輸入有效載荷中的附加元數(shù)據(jù)項及其 MIME 類型。 
public interface MessageService {


  @RSocketExchange("message/{name}")
  public Mono<String> sendMessage(
    @DestinationVariable("name") String name, 
    @Payload Mono<String> content) ;
}

Spring底層會生成一個實現(xiàn) MessageService 接口的代理,并使用底層的 RSocketRequester 進行交互。

2.3 生成服務代理

眾所周知,Spring Boot自動配置會為我們自動配置RSocketRequester.Builder。我們可以使用這個構建器來創(chuàng)建RSocketRequester。

@Component
public class RSocketComponent {


  private final RSocketRequester.Builder requesterBuilder;
  public RSocketComponent(RSocketRequester.Builder requesterBuilder) {
    this.requesterBuilder = requesterBuilder ;
  }
  @PostConstruct
  public void initRSocket() {
    RSocketRequester rsocketRequester = requesterBuilder.tcp("localhost", 7000);
  }
}

接下來,我們可以使用 RSocketRequester 來初始化一個 RSocketServiceProxyFactory,最終用于為任何帶有 @RSocketExchange 方法的 RSocket 服務接口創(chuàng)建客戶端代理。

RSocketServiceProxyFactory factory = RSocketServiceProxyFactory.builder(rsocketRequester).build() ;
MessageService messageService = factory.createClient(MessageService.class) ;

這里就得到了MessageService服務對象,接下來就可以進行服務調(diào)用的測試了。

針對RSocket服務端,我這里打算還是使用下面這篇文章中的服務端程序

SpringBoot整合RSocket實時數(shù)據(jù)通信

在RSocketComponent中添加如下方法,執(zhí)行服務端接口調(diào)用

public Mono<String> message(Mono<String> requestObject) {
  return this.service.sendMessage(requestObject) ;
}

接下來,我們就可以進行測試

2.4 測試

這里,通過Controller接口進行測試

@RestController
@RequestMapping("/messages")
public class MessageController {
  
  private final RSocketComponent rc ;
  public MessageController(RSocketComponent rc) {
    this.rc = rc ;
  }
  
  @GetMapping("msg")
  public String msg(String msg) {
    return this.rc.message(Mono.just(msg)).block() ;
  }
}

圖片圖片

圖片圖片

服務端控制臺輸出

接收到消息:Hello
接收到消息:Pack

測試通過;與Spring6之前版本相比較通過@RSocketExchange注解簡化了我們客戶端調(diào)用RSocket服務。其實,這種方式與Spring6中的@HttpExchange的使用及原理差不多。


責任編輯:武曉燕 來源: Spring全家桶實戰(zhàn)案例源碼
相關推薦

2024-10-11 11:19:05

LiteFlow框架流程

2025-04-16 10:03:40

開發(fā)Spring應用程序

2024-02-26 00:00:00

GolangRedisDocker

2022-10-26 07:14:25

Spring 6Spring業(yè)務

2017-09-05 15:30:00

JavascriptSocket.ioNode.js

2021-09-15 09:02:20

Spring 6Spring BootJava

2021-09-03 06:46:34

Spring 6pring Boot 項目

2023-09-19 15:33:50

Web實時消息推送

2024-04-07 09:41:18

SignalR實時通信開發(fā)

2024-09-02 09:31:19

2018-06-06 14:30:38

Spring BootApplication事件

2025-03-31 08:39:55

2024-08-02 09:00:17

NettyWebSocketNIO

2024-11-26 08:05:44

2025-04-09 02:02:00

Spring框架開發(fā)

2022-07-30 10:08:06

MQTT?協(xié)議物聯(lián)網(wǎng)

2018-05-30 15:10:24

Spring BootList類型

2024-05-31 14:06:55

SpringCDSGraalVM

2025-04-29 07:44:26

配置校驗機制

2009-06-24 09:22:04

Spring2.5新特
點贊
收藏

51CTO技術棧公眾號