我本身總結的Java學習的系統知識點以及面試問題,目前已經開源,會一直完善下去,歡迎建議和指導歡迎Star: https://github.com/Snailclimb/Java-Guidehtml
RPC
RPC(Remote Procedure Call)—遠程過程調用 ,它是一種經過網絡從遠程計算機程序上請求服務,而不須要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,爲通訊程序之間攜帶信息數據。在OSI網絡通訊模型中,RPC跨越了傳輸層和應用層。RPC使得開發分佈式程序就像開發本地程序同樣簡單。git
RPC採用客戶端(服務調用方)/服務器端(服務提供方)模式, 都運行在本身的JVM中。客戶端只須要引入要使用的接口,接口的實現和運行都在服務器端。RPC主要依賴的技術包括序列化、反序列化和數據傳輸協議,這是一種定義與實現相分離的設計。github
目前Java使用比較多的RPC方案主要有RMI(JDK自帶)、Hessian、Dubbo以及Thrift等。面試
注意: RPC主要指內部服務之間的調用,RESTful也能夠用於內部服務之間的調用,但其主要用途還在於外部系統提供服務,所以沒有將其包含在本知識點內。redis
詳細內容能夠參考:從懵逼到恍然大悟之Java中RMI的使用數據庫
Dubbo: Dubbo是 阿里巴巴公司開源的一個高性能優秀的服務框架,使得應用可經過高性能的 RPC 實現服務的輸出和輸入功能,能夠和 Spring框架無縫集成。服務器
詳細內容能夠參考:微信
詳細內容能夠參考: Hessian的使用以及理解網絡
詳細內容能夠參考: 【Java】分佈式RPC通訊框架Apache Thrift 使用總結框架
此外,Google推出的基於HTTP2.0的gRPC框架也開始獲得應用,其序列化協議基於Protobuf,網絡框架使用的是Netty4,可是其須要生成代碼,可擴展性也比較差。
消息中間件
消息中間件,也能夠叫作中央消息隊列或者是消息隊列(區別於本地消息隊列,本地消息隊列指的是JVM內的隊列實現),是一種獨立的隊列系統,消息中間件常常用來解決內部服務之間的 異步調用問題 。請求服務方把請求隊列放到隊列中便可返回,而後等待服務提供方去隊列中獲取請求進行處理,以後經過回調等機制把結果返回給請求服務方。
異步調用只是消息中間件一個很是常見的應用場景。此外,經常使用的消息隊列應用場景還偷以下幾個:
具體能夠參考:
當前使用較多的消息隊列有ActiveMQ(性能差,不推薦使用)、RabbitMQ、RocketMQ、Kafka等等,咱們以前提升的redis數據庫也能夠實現消息隊列,不過不推薦,redis自己設計就不是用來作消息隊列的。
具體能夠參考:
RabbitMQ: RabbitMQ 是一個由 Erlang 語言開發的 AMQP 的開源實現。RabbitMQ 最初起源於金融系統,用於在分佈式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗
AMQP :Advanced Message Queue,高級消息隊列協議。它是應用層協議的一個開放標準,爲面向消息的中間件設計,基於此協議的客戶端與消息中間件可傳遞消息,並不受產品、開發語言等條件的限制。
具體能夠參考:
具體能夠參考:
《十分鐘入門RocketMQ》 (阿里中間件團隊博客)
具體能夠參考:
推薦閱讀:
《Kafka、RabbitMQ、RocketMQ等消息中間件的對比 —— 消息發送性能和區別》
歡迎關注個人微信公衆號:" Java面試通關手冊"(一個有溫度的微信公衆號,無廣告,單純技術分享,期待與你共同進步~~~堅持原創,分享美文,分享各類Java學習資源。您想關注便關注,😁,公衆號只是我記錄文字和生活的地方,無所謂利益。)