RPC框架全稱叫“
在分布式應用大放異彩的今天,軟件研發(fā)工作(微服務、中臺)是一定離不開分布式,既然說到分布式就一定離不開RPC,所以RPC框架也是廣大程序員進階路上必須跨過去的一道坎,也是工作中經(jīng)常會用到的。因此,
業(yè)界知名RPC
各大互聯(lián)網(wǎng)公司都或多或少實現(xiàn)了自己的RPC框架,其中比較出名且常用的有:
阿里巴巴的dubbo:這個大家應該都用到過吧?GitHub地址:https://github.com/apache/dubbo 基于阿里巴巴fork的當當版dubbox:這個貌似也都用到過?在dubbo不死不活的那幾年。GitHub地址:https://github.com/dangdangdotcom/dubbox 谷歌grpc:谷歌版本的rpc,GitHub地址(Java版):https://github.com/grpc/grpc-java
大家可以自己去GitHub上去搜索這三大框架并進行學習。
自己簡單實現(xiàn)一個最基本的RPC框架
如果我們自己去實現(xiàn)一個簡單的RPC框架要怎么做?這個時候我們應該意識到我們是在寫一個框架,寫一個框架意味著我們無法再隨意的使用第三方依賴包,也就是除了一些工具類包可以使用,其他的都需要我們用Java一行一行的寫出來。
下面提供一下如何用Java實現(xiàn)一個簡單的RPC功能(談不上框架):
先定義一個RPC接口類,代碼如下圖:
寫Rpc接口類的實現(xiàn)類實現(xiàn)這兩個方法,
框架定義完成后,我們開始使用這個框架,先簡單定義一個測試用的服務接口:
實現(xiàn)類:
我們需要寫一個provider把這個服務提供出去,運行這個main方法即可:
寫一個cosumer遠程消費這個服務:
運行這個main方法會輸出:
設計一個RPC框架需要我們掌握哪些知識?
上面簡單實現(xiàn)了一個RPC框架,這個只是實驗性質(zhì)的編碼,實際上是無法使用的,因為在實際業(yè)務中,我們面對的是高并發(fā)、多請求。上面的套接字編程也是阻塞的,另外序列化也是用的Java自帶的序列化方法。
而了解主流rpc實現(xiàn)原理的同學都知道,
比如在dubbo中,默認使用
所以我們在設計一個rpc框架的時候,首先必須掌握上面說的那些知識,還得要求我們能夠很好的結(jié)合每一個技術(shù),做到融匯貫通。
網(wǎng)上也有很多關(guān)于RPC相關(guān)知識的文章,也有dubbo、dubbox、grpc等rpc框架的源碼解析文章,建議大家可以深耕這一塊,徹底摸透掌握這塊的實現(xiàn)原理。