日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

SpringBoot創(chuàng)建RSocket服務(wù)器的全過程記錄

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

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

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

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

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

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

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

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

步驟1:設(shè)置環(huán)境

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

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

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

現(xiàn)在,將下載的項目文件夾設(shè)置為終端中的當(dāng)前目錄:

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服務(wù)器進行對話,但現(xiàn)在,通過如下方式調(diào)用help命令來測試它是否正常工作:

java -jar rsc.jar --help

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

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:檢查服務(wù)器代碼

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

項目文件

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

應(yīng)用程序?qū)傩?/b>

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

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

消息類

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

@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通過提供構(gòu)造函數(shù)、getter、setter、toString和hashcode實現(xiàn)來簡化代碼。

控制器類

RSocket服務(wù)器控制器代碼可以在RSocketController.java文件中找到。這個類被注釋為Spring@Controller,這本質(zhì)上意味著它聲明了服務(wù)端點(在本例中為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()的方法,它接受單個消息對象(請求)并返回單個消息對象(響應(yīng))。

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

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

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

步驟3:啟動Spring Boot RSocket服務(wù)器

在第二個終端窗口中,保持現(xiàn)有終端窗口處于打開狀態(tài),將rsocket server文件夾設(shè)置為當(dāng)前目錄。然后使用以下命令構(gòu)建并運行RSocket服務(wù)器:

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

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

步驟4:使用RSocket CLI向服務(wù)器發(fā)送命令

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

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

您將注意到該命令聲明了一個RSocket消息路由(這是通過添加--route選項并指定路由的名稱來實現(xiàn)的)。在本例中,路由是請求-響應(yīng),它與RSocketController.java中請求-響應(yīng)處理程序方法中聲明的@MessageMapping匹配。

當(dāng)命令運行時,您將在終端窗口中看到一些調(diào)試信息,解釋在請求-響應(yīng)交互期間發(fā)生的事情。它看起來像這樣:

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}

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

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

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

你剛剛使用RSocket發(fā)送了一條請求-響應(yīng)消息。現(xiàn)在可以通過在終端窗口中按Ctrl-C或關(guān)閉RSocket服務(wù)器來停止RSocket服務(wù)器。如果您使用IDE運行RSocket服務(wù)器,您可以用通常的方式停止IDE中的進程。

工作原理

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

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

如果您繼續(xù)下去,您會發(fā)現(xiàn)使用springboot編寫一個簡單的RSocket服務(wù)器是多么容易。

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

總結(jié)

到此這篇關(guān)于SpringBoot創(chuàng)建RSocket服務(wù)器的文章就介紹到這了,更多相關(guān)SpringBoot創(chuàng)建RSocket服務(wù)器內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产日韩一区二区三免费高清| 久久精品91| 五月综合激情| 亚洲二区视频| 精品成人免费一区二区在线播放| 黑森林国产精品av| 97在线精品| 日韩精品2区| 日韩国产网站| 婷婷综合六月| 老司机免费视频一区二区三区| 亚洲1区在线观看| 亚洲福利久久| 国产在线|日韩| 国产精品多人| 日本精品影院| 五月天久久777| 麻豆一区二区99久久久久| 久久精品二区亚洲w码| 国产精品久久久久久久久久白浆 | 国产高清不卡| 国产精品久久观看| 欧美成人精品三级网站| 激情久久久久久久| 免费精品视频在线| 亚洲精品美女91| 欧美日韩午夜| 精品久久国产一区| 日韩精品电影| 国精品一区二区| 久久一二三区| 欧美亚洲自偷自偷| 久久精品色播| 国内一区二区三区| 美女av在线免费看| 1024精品一区二区三区| 国产亚洲精品久久久久婷婷瑜伽| 性色一区二区| 欧美日韩一区自拍| 欧美国产美女| 一级欧洲+日本+国产| 国产精品日韩久久久| 亚洲字幕久久| 麻豆久久一区| 成人日韩在线观看| 99pao成人国产永久免费视频| 午夜久久av| 亚洲一区二区三区中文字幕在线观看| 日韩欧美另类中文字幕| 亚洲综合精品四区| 视频一区日韩精品| 成人一二三区| 久久中文字幕av| 亚洲一区成人| 国产欧美另类| 欧美日韩夜夜| 久久亚洲道色| 国产欧美日韩一区二区三区在线| 国产另类在线| 欧美国产小视频| 亚洲精品人人| 欧美sm一区| 国产精品嫩模av在线| 国产情侣一区| 久久天堂av| 日本国产欧美| 成人羞羞在线观看网站| 蜜臀av性久久久久蜜臀aⅴ流畅| 精品国产中文字幕第一页| 亚洲一级二级| 国产精品亲子伦av一区二区三区 | 日韩视频在线一区二区三区 | 欧洲激情综合| 欧美日本三区| 欧美日韩精品免费观看视频完整| 国产欧美大片| 亚洲在线国产日韩欧美| 久久精品欧洲| 一区二区精品| 深夜视频一区二区| 久久国产生活片100| 99久久99视频只有精品| 国产精品网址| 亚洲男女自偷自拍| 国产精品麻豆久久| 日本v片在线高清不卡在线观看| 久久精品国语| 欧美激情精品| 蜜桃av一区| 久久高清免费| 国产成人免费精品| 日韩免费精品| 老色鬼久久亚洲一区二区| 麻豆mv在线观看| 国产精品宾馆| 亚洲精品看片| 久久久国产亚洲精品| 久久这里只有| 亚洲精品精选| 亚洲视频播放| 国产精品国产三级国产在线观看| 久久狠狠亚洲综合| 蜜桃91丨九色丨蝌蚪91桃色| 欧美羞羞视频| 久久只有精品| 国产精品v日韩精品v欧美精品网站| 久久99伊人| 亚洲手机视频| 欧美一区久久久| 老司机精品视频在线播放| 日韩av中文字幕一区二区三区| 日韩视频在线一区二区三区 | 国产一区导航| 久久九九99| 国产va在线视频| 欧美极品一区二区三区| 亚洲精品无播放器在线播放| 免播放器亚洲一区| 悠悠资源网久久精品| 亚洲高清激情| 欧美影院三区| japanese国产精品| 免费欧美一区| 亚洲精品网址| 樱桃成人精品视频在线播放| 一区在线免费观看| 日韩精品久久久久久久电影99爱| 91一区二区三区四区| 成人午夜网址| 91亚洲一区| 美女一区网站| 91tv亚洲精品香蕉国产一区| 高清久久精品| 日本久久综合| 韩国精品主播一区二区在线观看| 日韩中文首页| 一区在线免费| 六月婷婷一区| 日本亚洲欧洲无免费码在线| 国产拍在线视频| 国产亚洲精品v| 欧美香蕉视频| 亚洲成a人片| 日韩精品免费一区二区在线观看 | 精品国产亚洲日本| 97欧美在线视频| 日韩啪啪电影网| 久久久精品五月天| 欧美午夜不卡| 首页欧美精品中文字幕| 日韩中文字幕亚洲一区二区va在线 | 国内精品麻豆美女在线播放视频| 精品淫伦v久久水蜜桃| 成人国产精品一区二区免费麻豆| 蜜桃久久久久| 青青青免费在线视频| 亚洲91久久| 亚洲综合欧美| 日本一区中文字幕| 欧美激情五月| 日韩高清成人| 亚洲激情av| 日韩高清在线不卡| 老司机精品视频在线播放| 亚洲国产福利| 日韩欧美一区二区三区在线视频 | 91精品国产自产精品男人的天堂| 欧美在线精品一区| 美女精品一区二区| 欧美三级精品| 视频在线观看91| 国产精品手机在线播放| 久久精品国产99国产精品| 久久一区二区三区电影| 爽好多水快深点欧美视频| 国产精品乱战久久久| 国模精品一区| 中文日韩在线| 久久女人天堂| 国产伊人久久| 91精品日本| 精品99久久| 伊人久久婷婷| 久久不射中文字幕| 麻豆91精品| 亚洲精品婷婷| 国产日韩亚洲| 99久久久久| 亚洲精品看片| 国产精品国产三级国产在线观看| 婷婷亚洲五月| 亚洲精品国产日韩| 欧美激情麻豆| 少妇精品在线| 国产videos久久| 九九色在线视频| 日韩欧美少妇| 国产精品99久久久久久董美香| 欧美在线网站| 国产videos久久|