成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

SpringBoot創建RSocket服務器的全過程記錄

瀏覽:131日期:2023-03-10 17:09:59
前言

在微服務的多樣化世界中,HTTP是代理到代理通信中無可爭議的領導者。它成熟,無處不在。但在某些情況下,HTTP請求-響應可能很麻煩。如果您需要傳統請求-響應之外的通信模式,如fire-and-forget或streaming,該怎么辦?如果你想向任何一個方向發送信息呢?

有了HTTP,有很多方法可以實現這一點,但這不是構建協議的目的。許多解決方案都帶有額外的權衡或缺點。另外,這里沒有規則手冊說“你應該一直使用HTTP”,像AMQP這樣的消息傳遞協議已經證明了這一點。所以,知道你的選擇是什么是好的,每隔一段時間在你的列表中添加一些新技術也是健康的。這篇文章是關于一個這樣的替代RSocket。

RSocket是一種新的消息傳遞協議,旨在解決一些常見的微服務通信難題。使用RSocket,您可以獲得一個在TCP或WebSockets上工作的靈活協議。這意味著您可以在不進行轉換的情況下處理二進制消息。您可以使用諸如多路復用、背壓、恢復和路由等現代控件,還可以使用多種消息傳遞模式,包括啟動和忘記、請求-響應和流式傳輸。RSocket也是完全反應的,因此它非常適合于高吞吐量的微服務應用程序。早期采用者包括Netflix、Pivotal、阿里巴巴和Facebook,它們都是提供可伸縮互聯網服務的專家。

由于請求-響應是大多數web開發人員熟悉的基礎,因此我們將以這種模式開始我們的RSocket之旅。請求-響應的語義相當簡單,您發送一個請求,就得到一個響應。HTTP是建立在這個基本的交互之上的,它非常常見。

在本文中,您將了解如何使用RSocket,使用Spring Boot作為服務器,使用終端應用程序作為客戶機來執行請求響應。

請求-響應Request-response只是Spring和RSocket支持的四種交互模型之一。

當您按照下面的步驟操作時,您會注意到使用springboot構建RSocket服務器所需的代碼量非常少。這里已經為您提供了代碼,但是您也可以在幾分鐘內自己從頭開始編寫代碼。

步驟1:設置環境

首先,檢查是否安裝了以下必備組件:

Java8或更高版本的JavaSDK(要檢查,請在終端使用Java-version) 一個工作的javaide(我正在使用IntelliJ IDEA) 包含克隆或提取的演示代碼示例的文件夾。 Linux Bash/ZSH shell(如果您是Windows用戶,請查看下面的注釋)

如果您是Windows用戶,請切換到Microsoft針對Linux的Windows子系統。

現在,將下載的項目文件夾設置為終端中的當前目錄:

cd spring-rsocket-demo

在終端中,下載JAR文件如下:

cd rsocket-serverwget -O rsc.jar https://github.com/making/rsc/releases/download/0.4.2/rsc-0.4.2.jar

稍后您將使用此客戶機與RSocket服務器進行對話,但現在,通過如下方式調用help命令來測試它是否正常工作:

java -jar rsc.jar --help

您應該會看到下面這樣的一些輸出(我已經截斷了),解釋了命令的用法和選項。

usage: rsc Uri [Options]Non-option arguments:[String: Uri]Option Description------ -------------channel Shortcut of --im REQUEST_CHANNEL-d, --data [String] Data. Use ’-’ to read data from...

把這個終端窗口開著,你以后會需要的。

步驟2:檢查服務器代碼

在IDE中打開rsocket服務器項目并檢查代碼。如您所見,在springboot中支持RSocket服務器所需的代碼非常少。以下是一些亮點:

項目文件

在項目的pom.xml文件中,您可以看到Spring Boot RSocket服務器所需的<dependencies>。之所以使用SpringBootVersion2.2.5.RELEASE,是因為在撰寫本文時,該版本具有最適合生產的RSocket特性。該項目還依賴于lombok和springbootstartersocket庫。Lombok為Java數據類添加了構造函數、getter、setter和equals,還簡化了對日志等內容的訪問。RSocket的springbootstarter將RSocket與springboot集成在一起,并在運行時自動為您配置一些RSocket基礎設施。

應用程序屬性

在application.properties文件中,RSocket服務器的TCP端口被設置為7000,Spring Boot的延遲初始化功能被打開。

spring.rsocket.server.port=7000spring.main.lazy-initialization=true

消息類

第一個更詳細的類叫做Message.java。這個Lombok@Data類用于對客戶機和服務器(或者“requester”和“responder”,如果您愿意的話)之間的請求和響應消息進行建模。這個類看起來像這樣…

@Data@AllArgsConstructor@NoArgsConstructorpublic class Message { private String origin; private String interaction; private long index; private long created = Instant.now().getEpochSecond(); public Message(String origin, String interaction) {this.origin = origin;this.interaction = interaction;this.index = 0; } public Message(String origin, String interaction, long index) {this.origin = origin;this.interaction = interaction;this.index = index; }}

使用這個類,您可以說一條消息來自何處(它的來源),它打算使用哪種消息傳遞樣式(交互),以及消息序列中的序列號(它的索引)。Lombok通過提供構造函數、getter、setter、toString和hashcode實現來簡化代碼。

控制器類

RSocket服務器控制器代碼可以在RSocketController.java文件中找到。這個類被注釋為Spring@Controller,這本質上意味著它聲明了服務端點(在本例中為RSocket endpoints)。

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

在類中,有一個名為requestResponse()的方法,它接受單個消息對象(請求)并返回單個消息對象(響應)。

您會注意到,這個requestResponse()方法用@MessageMapping(“request-response”)注釋修飾。此注釋聲明任何包含請求-響應的RSocket路由的元數據的消息都應該由此方法處理。稍后從客戶端發送請求消息時,您將使用此路由。

你注意到這和Spring的REST控制器有什么不同嗎?對于REST控制器,URL路徑映射(如/hello)用于將HTTP調用與其處理程序方法相關聯。

這就是代碼。我們試試看。

步驟3:啟動Spring Boot RSocket服務器

在第二個終端窗口中,保持現有終端窗口處于打開狀態,將rsocket server文件夾設置為當前目錄。然后使用以下命令構建并運行RSocket服務器:

./mvnw clean package spring-boot:run -DskipTests=true

或者,如果愿意的話,可以在javaide中使用“Build”和“Run”命令。

步驟4:使用RSocket CLI向服務器發送命令

接下來,您將使用在步驟1中下載并測試的RSocket client rsc.jar向正在運行的服務器發送一條消息。返回到原來的終端窗口,在那里有--help文本并發出以下命令:

java -jar rsc.jar --debug --request --data '{'origin':'Client','interaction':'Request'}' --route request-response tcp://localhost:7000

您將注意到該命令聲明了一個RSocket消息路由(這是通過添加--route選項并指定路由的名稱來實現的)。在本例中,路由是請求-響應,它與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: 69Metadata: +-------------------------------------------------+ | 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: 81Data: +-------------------------------------------------+ | 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}

您看到的調試輸出被分成三個“消息幀”。第一個消息幀被標記為Metadata。在本例中,它顯示發送到服務器的路由元數據(請求-響應)。第二幀顯示客戶機發送給服務器的數據消息(一個JSON字符串)。第三幀顯示服務器返回給客戶機的響應消息(也是一個JSON字符串)。

在最后一行,您可以看到來自服務器的JSON格式的響應被單獨打印出來,確認我們的命令消息已被服務器成功接收和確認:

{'origin':'Server','interaction':'Response','index':0,'created':1582802421}

你剛剛使用RSocket發送了一條請求-響應消息?,F在可以通過在終端窗口中按Ctrl-C或關閉RSocket服務器來停止RSocket服務器。如果您使用IDE運行RSocket服務器,您可以用通常的方式停止IDE中的進程。

工作原理

你下載的RSocket rsc客戶端使用RSocket消息傳遞協議向RSocketController發送請求消息。消息通過TCP發送到tcp://localhost:7000服務器正在等待的位置。

在第一消息幀中發送消息路由指令。此路由指令使用CLI客戶端的--route選項設置,并設置為request-response。Spring使用這個路由信息來選擇正確的@MessageMapping端點來調用requestResponse(Message-request)方法。然后,該方法用自己的消息進行響應。CLI客戶機將終端窗口中的整個交互打印為一系列消息幀。

如果您繼續下去,您會發現使用springboot編寫一個簡單的RSocket服務器是多么容易。

原文地址:https://spring.io/blog/2020/03/02/getting-started-with-rsocket-spring-boot-server

總結

到此這篇關于SpringBoot創建RSocket服務器的文章就介紹到這了,更多相關SpringBoot創建RSocket服務器內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
26uuuu精品一区二区| 国产精品乱码久久久久久| 亚洲h动漫在线| 精品成人一区二区三区四区| 99在线|亚洲一区二区| 国产一区在线视频| 亚洲综合999| 中文字幕一区二区在线观看 | 国产精品综合在线视频| 亚洲自拍另类综合| 国产精品麻豆99久久久久久| 精品国产亚洲一区二区三区在线观看| 亚洲综合电影一区二区三区| 欧美1区免费| 成人免费福利片| 国产在线国偷精品免费看| 日韩av一区二区三区四区| 亚洲精品久久7777| 国产亚洲欧美一区在线观看| 欧美日韩国产大片| 欧美另类z0zxhd电影| 在线看一区二区| 欧美一区二区三区日韩| 精品成人私密视频| 亚洲免费观看高清在线观看| 欧美激情在线一区二区| 久久精品夜色噜噜亚洲a∨| 欧美精品v国产精品v日韩精品| 亚洲激情精品| 亚洲精品美女| 在线日韩欧美| 亚洲欧美电影在线观看| 国产麻豆精品theporn| 91精品福利在线一区二区三区| 国内精品久久久久久久影视蜜臀| 99精品欧美一区二区三区综合在线| 国产真实久久| 久久久综合网| 欧美一区二区三区视频| 欧美日韩激情一区二区三区| 天堂va蜜桃一区二区三区漫画版| 欧美网站在线| 亚洲另类中文字| 在线免费观看欧美| 亚洲欧洲制服丝袜| 久久av一区二区三区| 国内精品国产成人| 国产欧美一区二区三区沐欲| 日韩视频在线一区二区三区| 国产精品色眯眯| 日韩亚洲精品在线| 国产老肥熟一区二区三区| 日韩欧美亚洲国产精品字幕久久久| 激情综合电影网| 亚洲激情男女视频| 亚洲精品在线电影| 亚洲一区二区三区色| 日本伊人色综合网| 欧洲生活片亚洲生活在线观看| 亚洲精品一区二区三区精华液| 午夜精品亚洲一区二区三区嫩草| 午夜影院久久久| 成人午夜在线免费| 日韩一区二区电影网| 91在线观看免费视频| 亚洲同性gay激情无套| 在线一区二区三区四区| 粉嫩在线一区二区三区视频| 中文在线资源观看网站视频免费不卡| 亚洲另类黄色| 九一九一国产精品| 精品国产一区二区亚洲人成毛片| 欧美日韩亚洲三区| 午夜精品影院在线观看| 日韩免费视频一区二区| 99国产精品久久久久久久成人热| 激情图区综合网| 欧美国产精品中文字幕| 国产美女诱惑一区二区| 国内成人自拍视频| 亚洲欧洲精品一区二区精品久久久| 一本大道综合伊人精品热热| 97精品国产露脸对白| 一区二区三区资源| 欧美精品在线一区二区三区| 欧美午夜免费| 奇米四色…亚洲| 久久午夜电影网| 一本大道久久a久久精品综合| 91最新地址在线播放| 五月婷婷激情综合网| 久久这里只有精品首页| 国产精品区一区| www.欧美色图| 亚洲一区国产视频| 精品国产青草久久久久福利| 午夜一区不卡| www.色精品| 日韩在线一区二区三区| 国产香蕉久久精品综合网| 色av综合在线| 欧美视频福利| 国产专区欧美精品| 亚洲精品免费在线| 日韩欧美国产电影| 午夜在线一区| 亚洲欧美影院| 免费观看在线色综合| 中文字幕中文字幕一区| 精品视频1区2区3区| 最新亚洲一区| 成a人片国产精品| 日韩av中文在线观看| 日本一区二区久久| 宅男在线国产精品| 亚洲影院免费| 午夜精品一区二区三区四区| 国产一区二区三区在线观看免费| 亚洲激情自拍视频| 精品国产一区二区三区忘忧草 | 一区二区不卡在线播放 | www.日本不卡| 久久99精品一区二区三区| 一区二区三区在线免费播放| 久久综合九色综合久久久精品综合| 色偷偷成人一区二区三区91 | 91麻豆精品91久久久久久清纯| 国产视频一区三区| 欧美日韩在线高清| 粉嫩一区二区三区在线看| 日本中文字幕不卡| 亚洲人成在线播放网站岛国| 久久综合999| 欧美浪妇xxxx高跟鞋交| 国产精品一区二区a| 欧美日韩在线播放一区二区| 不卡av在线免费观看| 久久www免费人成看片高清| 亚瑟在线精品视频| 亚洲欧美福利一区二区| 久久九九国产精品| 制服丝袜亚洲网站| 欧亚洲嫩模精品一区三区| 国产区日韩欧美| 欧美日韩久久| 欧美一区1区三区3区公司| 国产精品一区二区不卡| 免费人成精品欧美精品| 亚洲h精品动漫在线观看| 自拍偷拍亚洲综合| 日本一区二区综合亚洲| 久久综合中文字幕| 日韩一区二区在线播放| 欧美日韩高清一区二区| 色妹子一区二区| 国产精品一区二区欧美| 日韩图片一区| 在线欧美福利| 亚洲福利专区| 亚洲性视频h| 亚洲欧美亚洲| 欧美激情1区| 91在线你懂得| 91网站在线观看视频| www.日本不卡| 91在线视频在线| 91香蕉视频黄| 欧美日韩精品免费观看视频完整 | 欧美日韩中字一区| 久久久噜噜噜| 色呦呦国产精品| 在线视频一区二区三| 在线亚洲一区二区| 在线观看视频一区二区 | 欧美丰满一区二区免费视频 | 亚洲第一福利视频在线| 亚洲一线二线三线久久久| 亚洲免费观看高清完整| 亚洲精品成人在线| 亚洲乱码国产乱码精品精可以看 | 中文字幕一区二区三区蜜月| 国产精品午夜电影| 国产精品美女久久久久高潮| 中文字幕精品一区二区三区精品| 日本一区二区成人在线| 1024精品合集| 亚洲一区二区综合| 日本中文字幕一区| 国产综合色精品一区二区三区| 国产在线视频一区二区| 国产99久久久精品| 成人av手机在线观看| 91在线精品秘密一区二区| 99国产精品国产精品毛片| 欧美一区二区| 亚洲精品社区| 另类图片国产| 欧美午夜宅男影院| 4438x亚洲最大成人网| 欧美videos大乳护士334|