1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 3685字,需瀏覽 8分鐘

         ·

        2021-07-17 15:16

        背景

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

          Dubbo 3.0 源碼示例
        • RSocket 是一個(gè)新的、語言無關(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í)。

        • 本文著重說明 Spring 官方孵化器新上項(xiàng)目 spring-retrosocket 使用

        Spring 孵化器截圖

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

        創(chuàng)建 RSocket Server

          1. 創(chuàng)建 spring boot 項(xiàng)目,添加相關(guān)依賴即可
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-rsocket</artifactId>
        </dependency>
          1. 指定 rsocket server 服務(wù)端口即可
        spring.rsocket.server.port=8848
          1. 定義 RR 請求模型處理信道

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


        @Controller
        public class GreetingsController {
          @MessageMapping("request-response")
          Mono<String> reqResponse(@Payload String payload) {
           log.info("收到 RR 請求信息: {}", payload);
           return Mono.just("Hello, " + payload);
          }
        }

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

        • 使用 Spring Initializr 并生成一個(gè)新項(xiàng)目。
        依賴版本
        spring-retrosocke0.0.1-SNAPSHOT
        Spring Boot2.5.2
        <dependency>
            <groupId>org.springframework.retrosocket</groupId>
            <artifactId>spring-retrosocket</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        • 添加 spring maven 倉庫

        如果您有一個(gè)現(xiàn)有的構(gòu)建,請確保您擁有spring-milestonesspring-snapshotsSpring 存儲庫。

        <repositories>
           <repository>
             <id>spring-milestones</id>
             <name>Spring Milestones</name>
             <url>https://repo.spring.io/milestone</url>
           </repository>
           <repository>
             <id>spring-snapshots</id>
             <name>Spring Snapshots</name>
             <url>https://repo.spring.io/snapshot</url>
             <snapshots>
               <enabled>true</enabled>
             </snapshots>
           </repository>
         </repositories>

        3. 基本用法

        • 開啟 RSocket 客戶端支持 在您的 Java 代碼中,您需要啟用 RSocket 客戶端支持。使用@EnableRSocketClient注釋。您還需要定義一個(gè)RSocketRequesterbean。
        @SpringBootApplication
        @EnableRSocketClients
        class RSocketClientApplication {
         @Bean
         RSocketRequester requester(RSocketRequester.Builder builder) {
          return builder.connectTcp("localhost"8888).block();
         }
        }
        • 然后,定義一個(gè) RSocket 客戶端接口(類似于 FeignClient),如下所示:
        @RSocketClient
        interface GreetingClient {
         @MessageMapping("request-response")
         Mono<GreetingResponse> requestResponse(Mono<String> name);
        }
        • 測試代碼
        @SpringBootTest
        class DemoApplicationTests {

         @Autowired
         private GreetingClient greetingClient;

         @Test
         void testGreetingClient() {
          Mono<String> stringMono = greetingClient.requestResponse(Mono.just("lengleng"));
          System.out.println(stringMono.block());
         }
        }

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

        瀏覽 66
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产精品欧美性爱 | 国产情侣激情自拍 | 91高端极品外围女在线观看 | 狠色婷婷久久一区二区三区_ | 午夜精品久久久久久久星辰影院 | 亚洲成人AV在线观看 | 国产乱伦视频 | 少妇被黑人嗷嗷大叫视频 | 高清无码在线观看黄片 | 亚洲IV秘 一区二区三区 |