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