摘要:等之所以支持跨語(yǔ)言,是因?yàn)樗麄冏约憾x了一套結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)格式,如的,用于編解碼對(duì)象,作為各個(gè)語(yǔ)言通信的中間協(xié)議。
前段時(shí)間覺(jué)得自己一直用別人的框架,站在巨人的肩膀上,也該自己造造輪子了 一時(shí)興起 就著手寫(xiě)起了RPC框架 這里寫(xiě)了系列博客拿給大家分享下
這篇是開(kāi)篇的思路篇 項(xiàng)目最終的代碼放在了我的github上
https://github.com/wephone/Me...
歡迎star,提issues
首先說(shuō)下關(guān)于RPC的幾個(gè)常見(jiàn)問(wèn)題
什么是RPCPRC:Remote Procedure Call 遠(yuǎn)程過(guò)程調(diào)用
在分布式系統(tǒng)中,每個(gè)節(jié)點(diǎn)之間的通信都是靠RPC來(lái)完成 RPC是分布式應(yīng)用的基本組件
Apache的Thrift
Google的gprc
阿里巴巴的dubbo等
dubbo應(yīng)該是3這中最簡(jiǎn)單易用的了,但dubbo只支持Java語(yǔ)言,thrift和gprc都是支持跨語(yǔ)言的,并且dubbo內(nèi)部幫你實(shí)現(xiàn)了對(duì)分布式注冊(cè)中心zookeeper的使用,另外兩個(gè)仍需自己實(shí)現(xiàn)對(duì)注冊(cè)中心的操作。
thrift grpc等之所以支持跨語(yǔ)言,是因?yàn)樗麄冏约憾x了一套結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)格式,如Google的protobuf,用于編解碼對(duì)象,作為各個(gè)語(yǔ)言通信的中間協(xié)議。
RPC是一個(gè)概念,普通web開(kāi)發(fā)的curl rest接口,也可以算作一種基于HTTP協(xié)議的RPC調(diào)用
RPC的使用比起curl一個(gè)重要的點(diǎn)就是忽略底層細(xì)節(jié),像使用本地服務(wù)一樣調(diào)用遠(yuǎn)程服務(wù) 我們將在RPC框架中使用動(dòng)態(tài)代理來(lái)實(shí)現(xiàn)這個(gè)要求
本系列博客由淺到深,帶大家打造一個(gè)支持跨語(yǔ)言,也支持zookeeper的RPC框架 目前先用Java實(shí)現(xiàn)
實(shí)現(xiàn)思路RPC有兩個(gè)使用方 一個(gè)是本地調(diào)用端 一個(gè)是遠(yuǎn)程實(shí)現(xiàn)端
調(diào)用端使用動(dòng)態(tài)代理 代理我們需要遠(yuǎn)程調(diào)度的接口 實(shí)現(xiàn)忽略底層細(xì)節(jié) 像使用本地服務(wù)一樣使用調(diào)用遠(yuǎn)程服務(wù)
將我們本地調(diào)用的接口方法信息(形參,方法名,返回類(lèi)型等)通過(guò)網(wǎng)絡(luò)發(fā)送至遠(yuǎn)程實(shí)現(xiàn)端
遠(yuǎn)程實(shí)現(xiàn)端接收到相應(yīng)信息,反射調(diào)用對(duì)象的實(shí)現(xiàn)類(lèi)
執(zhí)行完實(shí)現(xiàn)類(lèi)后把返回值發(fā)回給調(diào)用端
調(diào)用端接收到返回值,代理返回結(jié)果 遠(yuǎn)程調(diào)用完畢
實(shí)現(xiàn)細(xì)節(jié)使用Netty作為Java端網(wǎng)絡(luò)傳輸框架
為盡量支持跨語(yǔ)言 傳輸數(shù)據(jù)編解碼使用json格式(本來(lái)想用protobuf 但它只支持強(qiáng)類(lèi)型Int這種 不支持編解碼Object這樣的弱類(lèi)型 會(huì)降低使用的靈活性)
下一篇博客中 將帶大家用11個(gè)Java類(lèi) 實(shí)現(xiàn)一個(gè)基于spring的Java RPC框架
暫時(shí)不使用一些常見(jiàn)設(shè)計(jì)模式,暫時(shí)不做zookeeper的支持和異常處理等細(xì)節(jié)問(wèn)題
后續(xù)版本再對(duì)這個(gè)demo進(jìn)行優(yōu)化,并支持zookeeper
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/68274.html
摘要:每個(gè)都可以通過(guò)其路徑唯一標(biāo)識(shí),同時(shí)每個(gè)節(jié)點(diǎn)還可以存儲(chǔ)少量數(shù)據(jù)。監(jiān)聽(tīng)機(jī)制,監(jiān)聽(tīng)某個(gè)當(dāng)該發(fā)生變化時(shí),會(huì)回調(diào)該,但是這個(gè)是一次性的,下次需要監(jiān)聽(tīng)時(shí)還得再注冊(cè)一次。 前面的文章中 我用netty實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的一對(duì)一的RPC 11個(gè)類(lèi)實(shí)現(xiàn)簡(jiǎn)單java rpc 接下來(lái)的文章中 我將使用zookeeper作為rpc調(diào)用的分布式注冊(cè)中心 從而實(shí)現(xiàn)多對(duì)多(多個(gè)調(diào)用者,多個(gè)提供者)的rpc調(diào)用,負(fù)載均...
摘要:項(xiàng)目版本源碼在上一博文中跟大家講了的實(shí)現(xiàn)思路思路畢竟只是思路那么這篇就帶著源碼給大家講解下實(shí)現(xiàn)過(guò)程中的各個(gè)具體問(wèn)題讀懂本篇需要的基本知識(shí)若尚未清晰請(qǐng)自行了解后再閱讀本文動(dòng)態(tài)代理框架的基本使用的基本配置最終項(xiàng)目的使用如下調(diào)用端代碼及配置測(cè)試類(lèi) 項(xiàng)目1.0版本源碼 https://github.com/wephone/Me... 在上一博文中 跟大家講了RPC的實(shí)現(xiàn)思路 思路畢竟只是思路...
摘要:多線程編程這篇文章分析了多線程的優(yōu)缺點(diǎn),如何創(chuàng)建多線程,分享了線程安全和線程通信線程池等等一些知識(shí)。 中間件技術(shù)入門(mén)教程 中間件技術(shù)入門(mén)教程,本博客介紹了 ESB、MQ、JMS 的一些知識(shí)... SpringBoot 多數(shù)據(jù)源 SpringBoot 使用主從數(shù)據(jù)源 簡(jiǎn)易的后臺(tái)管理權(quán)限設(shè)計(jì) 從零開(kāi)始搭建自己權(quán)限管理框架 Docker 多步構(gòu)建更小的 Java 鏡像 Docker Jav...
摘要:前言昨天看了一篇關(guān)于用幾行代碼實(shí)現(xiàn)框架的博客,收獲很大,于是我想在這篇博客的基礎(chǔ)上理一理思路,盡可能的多加一點(diǎn)注釋?zhuān)M(jìn)一步降低學(xué)習(xí)框架原理的門(mén)檻。 前言 昨天看了一篇關(guān)于用幾行代碼實(shí)現(xiàn)RPC框架的博客[http://javatar.iteye.com/blog...](),收獲很大,于是我想在這篇博客的基礎(chǔ)上理一理思路,盡可能的多加一點(diǎn)注釋?zhuān)M(jìn)一步降低學(xué)習(xí)RPC框架原理的門(mén)檻。 原理圖...
閱讀 1633·2021-11-23 09:51
閱讀 1157·2021-10-12 10:12
閱讀 2920·2021-09-22 16:06
閱讀 3729·2019-08-30 15:56
閱讀 3558·2019-08-30 15:53
閱讀 3181·2019-08-29 16:29
閱讀 2420·2019-08-29 15:27
閱讀 2122·2019-08-26 10:49