电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:95日期: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發送了一條請求-響應消息。現在可以通過在終端窗口中按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
相關文章:
主站蜘蛛池模板: 嘉兴恒升声级计-湖南衡仪声级计-杭州爱华多功能声级计-上海邦沃仪器设备有限公司 | 南京泽朗生物科技有限公司-液体饮料代加工_果汁饮料代加工_固体饮料代加工 | 联系我们老街华纳娱乐公司官网19989979996(客服) | 卧涛科技有限公司科技项目申报公司|高新技术企业申报|专利申请 | 缓蚀除垢剂_循环水阻垢剂_反渗透锅炉阻垢剂_有机硫化物-郑州威大水处理材料有限公司 | 聚氨酯催化剂K15,延迟催化剂SA-1,叔胺延迟催化剂,DBU,二甲基哌嗪,催化剂TMR-2,-聚氨酯催化剂生产厂家 | 隧道烘箱_隧道烘箱生产厂家-上海冠顶专业生产烘道设备 | 全自动烧卖机厂家_饺子机_烧麦机价格_小笼汤包机_宁波江北阜欣食品机械有限公司 | 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 彩超机-黑白B超机-便携兽用B超机-多普勒彩超机价格「大为彩超」厂家 | 汽车整车综合环境舱_军标砂尘_盐雾试验室试验箱-无锡苏南试验设备有限公司 | 金属雕花板_厂家直销_价格低-山东慧诚建筑材料有限公司 | 砂尘试验箱_淋雨试验房_冰水冲击试验箱_IPX9K淋雨试验箱_广州岳信试验设备有限公司 | 锂电池生产厂家-电动自行车航模无人机锂电池定制-世豹新能源 | 电脑知识|软件|系统|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网 | 冷水机-冰水机-冷冻机-冷风机-本森智能装备(深圳)有限公司 | 成都租车_成都租车公司_成都租车网_众行宝 | 密集架|电动密集架|移动密集架|黑龙江档案密集架-大量现货厂家销售 | 拉伸膜,PE缠绕膜,打包带,封箱胶带,包装膜厂家-东莞宏展包装 | PC构件-PC预制构件-构件设计-建筑预制构件-PC构件厂-锦萧新材料科技(浙江)股份有限公司 | 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 河南橡胶接头厂家,河南波纹补偿器厂家,河南可曲挠橡胶软连接,河南套筒补偿器厂家-河南正大阀门 | 工业胀紧套_万向节联轴器_链条-规格齐全-型号选购-非标订做-厂家批发价格-上海乙谛精密机械有限公司 | 游泳池设计|设备|配件|药品|吸污机-东莞市太平洋康体设施有限公司 | 深圳宣传片制作_产品视频制作_深圳3D动画制作公司_深圳短视频拍摄-深圳市西典映画传媒有限公司 | 塑料异型材_PVC异型材_封边条生产厂家_PC灯罩_防撞扶手_医院扶手价格_东莞市怡美塑胶制品有限公司 | 物流公司电话|附近物流公司电话上门取货 | bkzzy在职研究生网 - 在职研究生招生信息咨询平台 | 湖南档案密集架,智能,物证,移动,价格-湖南档案密集架厂家 | 硬度计_影像测量仪_维氏硬度计_佛山市精测计量仪器设备有限公司厂家 | 聚合甘油__盐城市飞龙油脂有限公司 | 橡胶电子拉力机-塑料-微电脑电子拉力试验机厂家-江苏天源 | 宁夏活性炭_防护活性炭_催化剂载体炭-宁夏恒辉活性炭有限公司 | 油罐车_加油机_加油卷盘_加油机卷盘_罐车人孔盖_各类球阀_海底阀等车用配件厂家-湖北华特专用设备有限公司 | 冷却塔减速机器_冷却塔皮带箱维修厂家_凉水塔风机电机更换-广东康明冷却塔厂家 | 沈阳缠绕包装机厂家直销-沈阳海鹞托盘缠绕包装机价格 | 微波消解仪器_智能微波消解仪报价_高压微波消解仪厂家_那艾 | 双菱电缆-广州电缆厂_广州电缆厂有限公司 | 淘气堡_室内儿童乐园_户外无动力儿童游乐设备-高乐迪(北京) | 电动葫芦|手拉葫芦|环链电动葫芦|微型电动葫芦-北京市凌鹰起重机械有限公司 | 四川成都干燥设备_回转筒干燥机_脉冲除尘器_输送设备_热风炉_成都川工星科机电设备有限公司 |