内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

RPC框架的底層是什么原理

這篇文章給大家介紹RPC框架的底層是什么原理,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

成都創(chuàng)新互聯(lián)公司2013年至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站建設(shè)、成都網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元王益做網(wǎng)站,已為上家服務(wù),為王益各地企業(yè)和個人服務(wù),聯(lián)系電話:18980820575

1. RPC框架的概念

RPC(Remote Procedure Call)–遠程過程調(diào)用,通過網(wǎng)絡(luò)通信調(diào)用不同的服務(wù),共同支撐一個軟件系統(tǒng),微服務(wù)實現(xiàn)的基石技術(shù)。

使用RPC可以解耦系統(tǒng),方便維護,同時增加系統(tǒng)處理請求的能力。

RPC框架的底層是什么原理

上面是一個簡單的軟件系統(tǒng)結(jié)構(gòu),我們拆分出來用戶系統(tǒng)和訂單系統(tǒng)做為服務(wù)存在,讓不同的站點去調(diào)用。

只需要引入各個服務(wù)的接口包,在代碼中調(diào)用RPC服務(wù)就跟調(diào)用本地方法一樣,我剛接觸到這種調(diào)用方式的時候頗為驚奇,我明明調(diào)用的就是java語言方法?。ㄒ裫ava為例,現(xiàn)在RPC框架一般都支持多語言),怎么就調(diào)用了遠程的服務(wù)了呢??

2. RPC框架的原理解析

最近自己寫了一個簡單的RPC框架KRPC,原理分析結(jié)合中代碼,均為該框架源碼。

2.1 流程縱覽

RPC框架的底層是什么原理

如上圖所示,我將一個RPC調(diào)用流程概括為上圖中5個流程,左邊3個為客戶端流程,右邊兩個為服務(wù)端流程。

下面就各流程進行解析

2.2 客戶端調(diào)用

服務(wù)調(diào)用方在調(diào)用服務(wù)時,一般進行相關(guān)初始化,通過配置文件/配置中心 獲取服務(wù)端地址用戶調(diào)用。

// 用戶服務(wù)接口public interface UserService { public User genericUser(Integer id,String name,Long phone);}//調(diào)用方//服務(wù)初始化KRPC.init("D:\\krpc\\service\\demo\\conf\\client.

一開始接觸RPC調(diào)用方法肯定就有疑惑,它不是一個接口嗎,直接調(diào)用應(yīng)該沒啥效果啊,我也沒有引入實現(xiàn)包。

帶著這個疑惑,我們就進入下一個知識點,動態(tài)代理。

2.3 動態(tài)代理

動態(tài)代理這東西意如其名,它代理你幫你做事情,動態(tài)代理看這篇文章《詳解 Java 中的三種代理模式》。

上面我們不說道直接調(diào)用一個接口中的方法,并且沒有用該接口的實現(xiàn)類調(diào)用,那么方法是怎么生效的呢?

可以看到這個用戶服務(wù)這個service是由ProxyFactory代理工程創(chuàng)造的,在該ProxyFactory#create()方法中就跟一個代理處理器綁定在一起了。

@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {    //構(gòu)造請求request    Request request = new Request();    ....    return RequestHandler.request(serviceName, request,returnClass);}

這個類實現(xiàn)了InvocationHandler接口(JDK提供的動態(tài)代理技術(shù)),每次去調(diào)用接口方法,最終都交由該handler進行處理。

這個環(huán)節(jié)一般會獲取方法的一些信息,例如方法名,方法參數(shù)類型,方法參數(shù)值,返回對象類型。

同時這個環(huán)節(jié)會提供序列化功能,一般的RPC網(wǎng)絡(luò)傳輸使用TCP(哪怕使用HTTP)傳輸,這里也要將這些參數(shù)進行封裝成我們定義的數(shù)據(jù)接口進行傳輸。

2.4 網(wǎng)絡(luò)傳輸

我們通過將方法參數(shù)進行處理后,就要使用發(fā)起網(wǎng)絡(luò)請求,使用tcp傳輸?shù)木屠胹ocket通信進行傳輸,這一塊我開源項目中使用的同步堵塞的方案進行請求,也可以使用一些非堵塞方案進行請求,效率會更高一些。

關(guān)于RPC框架的底層是什么原理就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

網(wǎng)站欄目:RPC框架的底層是什么原理
網(wǎng)站路徑:http://m.rwnh.cn/article14/igjcge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站軟件開發(fā)服務(wù)器托管、網(wǎng)站制作、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營
阳泉市| 东丰县| 定陶县| 庆安县| 乐山市| 轮台县| 米易县| 双流县| 扶风县| 嘉祥县| 班戈县| 宁德市| 平山县| 邹城市| 桐乡市| 郧西县| 晋江市| 内丘县| 年辖:市辖区| 龙门县| 德昌县| 宜丰县| 云霄县| 吉木萨尔县| 定边县| 普陀区| 海门市| 股票| 怀柔区| 新巴尔虎右旗| 韶山市| 北辰区| 仁化县| 慈利县| 新巴尔虎左旗| 鲜城| 泗水县| 浠水县| 永福县| 宜昌市| 南皮县|