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