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

Dubbo 3.0 ? No ! RSocket 永遠(yuǎn)的神

網(wǎng)絡(luò) 網(wǎng)絡(luò)管理
RSocket 是一個(gè)新的、語(yǔ)言無(wú)關(guān)的第七層應(yīng)用網(wǎng)絡(luò)協(xié)議。它是一個(gè)雙向、多路復(fù)用、基于消息、基于反應(yīng)流背壓的二進(jìn)制協(xié)議。

[[411111]]

背景

最近國(guó)內(nèi)技術(shù)圈最熱門的事情莫過(guò)于 Apache Dubbo 3.0 發(fā)布,作為 Dubbo 3 中最重要的特性是選擇 HTTP/2 作為底層通信協(xié)議,使用 protobuf 作為序列化協(xié)議的組合,這套組合方案也是 gRPC 協(xié)議使用的方案。最終還是沒(méi)有選擇 RSocket 協(xié)議作為 reactive programming (響應(yīng)式編程)的補(bǔ)充方案。

Dubbo 3.0 源碼示例

  • RSocket 是一個(gè)新的、語(yǔ)言無(wú)關(guān)的第七層應(yīng)用網(wǎng)絡(luò)協(xié)議。它是一個(gè)雙向、多路復(fù)用、基于消息、基于反應(yīng)流背壓的二進(jìn)制協(xié)議。和傳統(tǒng)網(wǎng)絡(luò)編程模型 HTTP 的 Request/Response 方式不同。RSocket 除了 Request/Response 方式之外,還支持 Fire And Forget(發(fā)送不回)、Stream(單向流)、Channel(雙向流)。
  • RSocket 的基礎(chǔ)可以參考筆者 《RSocket | 替代 REST 的不二選擇》文章參考學(xué)習(xí)。
  • 本文著重說(shuō)明 Spring 官方孵化器新上項(xiàng)目 spring-retrosocket 使用。

Spring 孵化器截圖

spring-retrosocket 通過(guò)提供注解驅(qū)動(dòng) RSocket 的客戶端,通過(guò)注解調(diào)用屏蔽 rosocket-java sdk 的復(fù)雜性。

1. 創(chuàng)建 RSocket Server

創(chuàng)建 spring boot 項(xiàng)目,添加相關(guān)依賴即可

  1. <dependency> 
  2.   <groupId>org.springframework.boot</groupId> 
  3.   <artifactId>spring-boot-starter-rsocket</artifactId> 
  4. </dependency> 

指定 rsocket server 服務(wù)端口即可

  1. spring.rsocket.server.port=8848 

定義 RR 請(qǐng)求模型處理信道

使用 @MessageMapping 指定路由路徑即可

  1. @Controller 
  2. public class GreetingsController { 
  3.   @MessageMapping("request-response"
  4.   Mono<String> reqResponse(@Payload String payload) { 
  5.    log.info("收到 RR 請(qǐng)求信息: {}", payload); 
  6.    return Mono.just("Hello, " + payload); 
  7.   } 

2. 使用 spring-retrosocket 創(chuàng)建客戶端

  • 使用 Spring Initializr 并生成一個(gè)新項(xiàng)目。
依賴 版本
spring-retrosocke 0.0.1-SNAPSHOT
Spring Boot 2.5.2
  1. <dependency> 
  2.     <groupId>org.springframework.retrosocket</groupId> 
  3.     <artifactId>spring-retrosocket</artifactId> 
  4.     <version>0.0.1-SNAPSHOT</version> 
  5. </dependency> 
  • 添加 spring maven 倉(cāng)庫(kù)

如果您有一個(gè)現(xiàn)有的構(gòu)建,請(qǐng)確保您擁有spring-milestones或spring-snapshotsSpring 存儲(chǔ)庫(kù)。

  1. <repositories> 
  2.    <repository> 
  3.      <id>spring-milestones</id> 
  4.      <name>Spring Milestones</name
  5.      <url>https://repo.spring.io/milestone</url> 
  6.    </repository> 
  7.    <repository> 
  8.      <id>spring-snapshots</id> 
  9.      <name>Spring Snapshots</name
  10.      <url>https://repo.spring.io/snapshot</url> 
  11.      <snapshots> 
  12.        <enabled>true</enabled> 
  13.      </snapshots> 
  14.    </repository> 
  15.  </repositories> 

3. 基本用法

  • 開(kāi)啟 RSocket 客戶端支持 在您的 Java 代碼中,您需要啟用 RSocket 客戶端支持。使用@EnableRSocketClient注釋。您還需要定義一個(gè)RSocketRequesterbean。
  1. @SpringBootApplication 
  2. @EnableRSocketClients 
  3. class RSocketClientApplication { 
  4.  @Bean 
  5.  RSocketRequester requester(RSocketRequester.Builder builder) { 
  6.   return builder.connectTcp("localhost", 8888).block(); 
  7.  } 
  • 然后,定義一個(gè) RSocket 客戶端接口(類似于 FeignClient),如下所示:
  1. @RSocketClient 
  2. interface GreetingClient { 
  3.  @MessageMapping("request-response"
  4.  Mono<GreetingResponse> requestResponse(Mono<String> name); 
  • 測(cè)試代碼
  1. @SpringBootTest 
  2. class DemoApplicationTests { 
  3.  
  4.  @Autowired 
  5.  private GreetingClient greetingClient; 
  6.  
  7.  @Test 
  8.  void testGreetingClient() { 
  9.   Mono<String> stringMono = greetingClient.requestResponse(Mono.just("lengleng")); 
  10.   System.out.println(stringMono.block()); 
  11.  } 

spring-retrosocket github源碼:https://github.com/spring-projects-experimental/spring-retrosocket

 

責(zé)任編輯:武曉燕 來(lái)源: JAVA架構(gòu)日記
相關(guān)推薦

2021-07-05 08:12:53

Nginx架構(gòu)多進(jìn)程

2025-04-21 04:00:00

2021-08-03 17:00:25

Spring Boot代碼Java

2021-08-09 10:21:42

云原生Dubbo3.0 服務(wù)治理

2020-11-14 15:43:35

人工智能算法象棋

2021-07-14 13:12:51

2022-03-15 18:33:34

URL重構(gòu)Dubbo3.0

2021-09-06 09:46:26

Dubbo 服務(wù)端開(kāi)發(fā)

2016-01-18 10:49:51

浪潮SAP

2011-02-22 13:32:03

2015-09-01 10:29:44

數(shù)據(jù)安全

2011-05-11 09:16:30

IIS后門

2021-12-30 23:45:11

Spring RSocket BroRSocke

2015-02-04 10:47:06

2009-09-11 08:39:33

2024-09-29 10:39:48

RSocketWebSocket通信

2020-06-01 08:35:36

編程語(yǔ)言JavaPython

2020-07-01 18:31:14

Linuxbash永遠(yuǎn)循環(huán)

2021-02-20 23:30:39

零信任網(wǎng)絡(luò)安全信息泄露

2013-03-01 10:15:43

敏捷開(kāi)發(fā)敏捷
點(diǎn)贊
收藏

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