RSocket入門:Spring Boot伺服器 -Spring.io
在微服務的多樣化世界中,HTTP無疑是代理到代理通訊的領導者。它已經成熟,完善,並且無處不在。但是在某些情況下,HTTP請求響應可能很麻煩。如果您需要基於傳統請求響應的通訊模式,例如“一勞永逸”或流式傳輸,該怎麼辦?如果要向任一方向傳送訊息怎麼辦?
RSocket是一種新的訊息傳遞協議,旨在解決一些常見的微服務通訊難題。使用RSocket,您可以獲得在TCP或WebSockets上執行的靈活協議。這意味著您可以執行二進位制訊息而無需轉換。您將獲得諸如多路複用,背壓,恢復和路由之類的現代控制元件,並且您將獲得多種訊息傳遞模式,包括即發即忘,請求響應和流傳輸。RSocket也具有完全反應性,因此非常適合您的高吞吐量微服務應用程式。
這裡下載演示程式碼示例。
@Controller public class RSocketController { @MessageMapping("request-response") Message requestResponse(Message request) { log.info("Received request-response request: {}", request); // create a single Message and return it return new Message(SERVER, RESPONSE); } } |
否注意到這與Spring的REST控制器有什麼不同?在REST控制器中,URL路徑對映(例如)/hello用於將HTTP呼叫與其處理程式方法關聯。這裡使用@MessageMapping("request-response")註解,此註釋宣告此方法應處理任何包含RSocket路由的後設資料訊息。稍後,當您從客戶端傳送請求訊息時,將使用此路由。
在application.properties檔案中,RSocket伺服器的TCP埠設定為7000,並且Spring Boot的惰性初始化功能已開啟。
spring.rsocket.server.port=7000 spring.main.lazy-initialization=true |
Maven配置檔案加入依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-rsocket</artifactId> </dependency> |
測試:
啟動Rsocket伺服器:
./mvnw clean package spring-boot:run -DskipTests=true |
使用RSocket CLI客戶端向伺服器傳送命令:
java -jar rsc.jar --debug --request --data "{\"origin\":\"Client\",\"interaction\":\"Request\"}" --route request-response tcp://localhost:7000 |
路由request-response與匹配RSocketController.java中在@MessageMapping宣告的路由。
當命令執行時,您將在終端視窗中看到一些除錯資訊,這些資訊解釋了請求-響應互動期間發生的情況。看起來像這樣:
2020-02-27 11:20:21.806 DEBUG --- [actor-tcp-nio-1] i.r.FrameLogger : sending -> Frame => Stream ID: 1 Type: REQUEST_RESPONSE Flags: 0b100000000 Length: 69 Metadata: +-------------------------------------------------+ | 0 1 2 3 4 5 6 7 8 9 a b c d e f | +--------+-------------------------------------------------+----------------+ |00000000| 10 72 65 71 75 65 73 74 2d 72 65 73 70 6f 6e 73 |.request-respons| |00000010| 65 |e | +--------+-------------------------------------------------+----------------+ Data: +-------------------------------------------------+ | 0 1 2 3 4 5 6 7 8 9 a b c d e f | +--------+-------------------------------------------------+----------------+ |00000000| 7b 22 6f 72 69 67 69 6e 22 3a 22 43 6c 69 65 6e |{"origin":"Clien| |00000010| 74 22 2c 22 69 6e 74 65 72 61 63 74 69 6f 6e 22 |t","interaction"| |00000020| 3a 22 52 65 71 75 65 73 74 22 7d |:"Request"} | +--------+-------------------------------------------------+----------------+ 2020-02-27 11:20:21.927 DEBUG --- [actor-tcp-nio-1] i.r.FrameLogger : receiving -> Frame => Stream ID: 1 Type: NEXT_COMPLETE Flags: 0b1100000 Length: 81 Data: +-------------------------------------------------+ | 0 1 2 3 4 5 6 7 8 9 a b c d e f | +--------+-------------------------------------------------+----------------+ |00000000| 7b 22 6f 72 69 67 69 6e 22 3a 22 53 65 72 76 65 |{"origin":"Serve| |00000010| 72 22 2c 22 69 6e 74 65 72 61 63 74 69 6f 6e 22 |r","interaction"| |00000020| 3a 22 52 65 73 70 6f 6e 73 65 22 2c 22 69 6e 64 |:"Response","ind| |00000030| 65 78 22 3a 30 2c 22 63 72 65 61 74 65 64 22 3a |ex":0,"created":| |00000040| 31 35 38 32 38 30 32 34 32 31 7d |1582802421} | +--------+-------------------------------------------------+----------------+ {"origin":"Server","interaction":"Response","index":0,"created":1582802421} |
相關文章
- Spring Cloud Gateway入門 - spring.ioSpringCloudGateway
- Spring Boot入門Spring Boot
- 重要版本Spring Boot 2.3.0釋出 - spring.ioSpring Boot
- Spring Boot系列(一):Spring Boot 入門篇Spring Boot
- Spring Boot HttpExchange 入門Spring BootHTTP
- Spring Boot Dubbo 入門Spring Boot
- spring boot快速入門Spring Boot
- Spring Boot入門(一):搭建Spring Boot專案Spring Boot
- Spring boot入門(一):快速搭建Spring boot專案Spring Boot
- Spring Boot (一)快速入門Spring Boot
- Spring Boot 2.0.1 入門教程Spring Boot
- Spring Boot整合hessian入門Spring Boot
- Spring Boot的Kafka入門Spring BootKafka
- Spring Boot 整合 Spring Security 入門案例教程Spring Boot
- Spring Boot 2和JPA入門Spring Boot
- Spring Boot 中使用 thrift 入門Spring Boot
- Spring Boot 中使用 grpc 入門Spring BootRPC
- Spring boot入門(二):Spring boot整合MySql,Mybatis和PageHelper外掛Spring BootMySqlMyBatis
- GraphQL SPQR和Spring Boot入門 | baeldungSpring Boot
- spring-boot入門程式詳解Springboot
- Spring Boot 2.0 WebFlux 教程 (一) | 入門篇Spring BootWebUX
- Spring Boot 最佳實踐(一)快速入門Spring Boot
- Spring Boot入門-快速搭建web專案Spring BootWeb
- 專題一之Spring Boot入門詳解Spring Boot
- Spring Boot GraphQL 實戰 01_快速入門Spring Boot
- 通往Spring Boot本機應用的道路:Spring GraalVM Native 0.7.0可以使用了 - spring.ioSpring BootLVM
- Spring Boot從2.3.0M1開始使用Gradle而不是Maven了 - spring.ioSpring BootGradleMaven
- Spring Boot入門(一):使用IDEA建立Spring Boot專案並使用yaml配置檔案Spring BootIdeaYAML
- Spring Boot 2 (十):Spring Boot 中的響應式程式設計和 WebFlux 入門Spring Boot程式設計WebUX
- springboot-rsocketbasicauth-example:在RSocket和Spring Boot中使用身份驗證的示例Spring Boot
- Spring Cloud Stream事件路由 - spring.ioSpringCloud事件路由
- 現在是時候了與Spring Boot 1.x說再見了! - spring.ioSpring Boot
- Spring Boot 2.x基礎教程:快速入門Spring Boot
- Spring Boot響應式客戶端WebClient入門Spring Boot客戶端Webclient
- Spring Boot -01- 快速入門篇(圖文教程)Spring Boot
- Spring Boot入門系列(二十)快速打造Restful API 介面Spring BootRESTAPI
- Spring Boot 2.x(十七):快速入門Elastic SearchSpring BootAST
- .NET程式設計師如何快入門Spring Boot程式設計師Spring Boot