偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

1. 簡(jiǎn)介

本篇文章將介紹與RSocket在Spring Boot中應(yīng)用的相關(guān)知識(shí),如果你對(duì)RSocket還不了解的,可以查看下面這篇文章

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

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

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

2. 實(shí)戰(zhàn)案例

2.1 依賴(lài)管理

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

該starter中包含所有必要的類(lèi)和接口。

2.2 使用@RSocketExchange

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

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

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

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


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

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

2.3 生成服務(wù)代理

眾所周知,Spring Boot自動(dòng)配置會(huì)為我們自動(dòng)配置RSocketRequester.Builder。我們可以使用這個(gè)構(gòu)建器來(lái)創(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);
  }
}

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

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

這里就得到了MessageService服務(wù)對(duì)象,接下來(lái)就可以進(jìn)行服務(wù)調(diào)用的測(cè)試了。

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

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

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

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

接下來(lái),我們就可以進(jìn)行測(cè)試

2.4 測(cè)試

這里,通過(guò)Controller接口進(jìn)行測(cè)試

@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() ;
  }
}

圖片圖片

圖片圖片

服務(wù)端控制臺(tái)輸出

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

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


責(zé)任編輯:武曉燕 來(lái)源: Spring全家桶實(shí)戰(zhàn)案例源碼
相關(guān)推薦

2025-05-13 07:13:25

2025-04-16 10:03:40

開(kāi)發(fā)Spring應(yīng)用程序

2022-10-26 07:14:25

Spring 6Spring業(yè)務(wù)

2024-10-11 11:19:05

LiteFlow框架流程

2024-02-26 00:00:00

GolangRedisDocker

2017-09-05 15:30:00

JavascriptSocket.ioNode.js

2021-09-03 06:46:34

Spring 6pring Boot 項(xiàng)目

2021-09-15 09:02:20

Spring 6Spring BootJava

2018-06-06 14:30:38

Spring BootApplication事件

2024-08-02 09:00:17

NettyWebSocketNIO

2023-09-19 15:33:50

Web實(shí)時(shí)消息推送

2024-09-02 09:31:19

2024-04-07 09:41:18

SignalR實(shí)時(shí)通信開(kāi)發(fā)

2025-03-31 08:39:55

2025-05-29 01:33:00

微服務(wù)架構(gòu)系統(tǒng)

2025-04-09 02:02:00

Spring框架開(kāi)發(fā)

2024-11-26 08:05:44

2025-04-29 07:44:26

配置校驗(yàn)機(jī)制

2009-06-24 09:22:04

Spring2.5新特

2018-05-30 15:10:24

Spring BootList類(lèi)型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)