1.場(chǎng)景
在微服務(wù)開(kāi)發(fā)中眶拉,在調(diào)用不同模塊之間的數(shù)據(jù)時(shí),經(jīng)炽径回去調(diào)用他的http接口忆植,總不能這樣,RPC框架,服務(wù)在代碼里就調(diào)用一個(gè)interface的接口朝刊,底層直接讓RPC框架發(fā)送請(qǐng)求到對(duì)應(yīng)的服務(wù)器上去
2. feign+ribbon
image.png
- spring cloud netflix技術(shù)棧耀里,RPC調(diào)用,用的就是feign框架+ribbon做負(fù)載均衡拾氓,暴露出來(lái)的服務(wù)接口冯挎,就是最最稀松平常的基于spring mvc寫(xiě)的controller暴露出來(lái)的一些http接口,定義一個(gè)http的url地址
- 通過(guò)feign框架進(jìn)行RPC調(diào)用:String result = serviceA.hello(name)咙鞍,會(huì)按照http協(xié)議來(lái)組裝你的請(qǐng)求數(shù)據(jù)房官,數(shù)據(jù)格式都是按照http協(xié)議里的請(qǐng)求來(lái)做的,http請(qǐng)求還還必須做一個(gè)序列化续滋,序列化成二進(jìn)制的字節(jié)流翰守,通過(guò)底層的tcp連接發(fā)送過(guò)去
- 本質(zhì)上服務(wù)A的部署是基于tomcat去進(jìn)行部署的,tomcat會(huì)監(jiān)聽(tīng)你指定的端口號(hào)疲酌,當(dāng)別人要發(fā)送http請(qǐng)求給你的時(shí)候蜡峰,首先必須跟tomcat建立tcp網(wǎng)絡(luò)連接,發(fā)送http請(qǐng)求給tomcat朗恳,tomcat收到之后湿颅,解析出來(lái)這個(gè)http請(qǐng)求,交給你的spring mvc寫(xiě)的controller來(lái)進(jìn)行處理
3.dubbo
image.png
dubbo自己使用的一套協(xié)議僻肖,自定義協(xié)議肖爵,也可以是別的協(xié)議,肯定不是http協(xié)議臀脏,去組裝請(qǐng)求數(shù)據(jù)劝堪,然后做一個(gè)序列化,二進(jìn)制字節(jié)數(shù)組或者是字節(jié)流揉稚,都可以秒啦,通過(guò)底層的網(wǎng)絡(luò)連接把請(qǐng)求數(shù)據(jù)發(fā)送過(guò)去就可以了
ServiceA這個(gè)類(lèi),調(diào)用他里面的hello()這個(gè)方法搀玖,傳入name這個(gè)參數(shù)余境,獲取result這個(gè)返回值,然后通過(guò)網(wǎng)絡(luò)連接把響應(yīng)數(shù)據(jù)按照自己的協(xié)議封裝灌诅,序列化芳来,通過(guò)網(wǎng)絡(luò)連接發(fā)送給服務(wù)B就可以了
gRPC
image.png