摘要:具體可以參考消息隊列之具體可以參考實戰之快速入門十分鐘入門阿里中間件團隊博客是一個分布式的可分區的可復制的基于發布訂閱的消息系統主要用于大數據領域當然在分布式系統中也有應用。目前市面上流行的消息隊列就是阿里借鑒的原理用開發而得。
我自己總結的Java學習的系統知識點以及面試問題,目前已經開源,會一直完善下去,歡迎建議和指導歡迎Star: https://github.com/Snailclimb/Java-Guide
RPC
RPC(Remote Procedure Call)—遠程過程調用 ,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程序之間攜帶信息數據。在OSI網絡通信模型中,RPC跨越了傳輸層和應用層。RPC使得開發分布式程序就像開發本地程序一樣簡單。
RPC采用客戶端(服務調用方)/服務器端(服務提供方)模式, 都運行在自己的JVM中。客戶端只需要引入要使用的接口,接口的實現和運行都在服務器端。RPC主要依賴的技術包括序列化、反序列化和數據傳輸協議,這是一種定義與實現相分離的設計。
目前Java使用比較多的RPC方案主要有RMI(JDK自帶)、Hessian、Dubbo以及Thrift等。
注意: RPC主要指內部服務之間的調用,RESTful也可以用于內部服務之間的調用,但其主要用途還在于外部系統提供服務,因此沒有將其包含在本知識點內。
常見RPC框架:RMI(JDK自帶): JDK自帶的RPC
詳細內容可以參考:從懵逼到恍然大悟之Java中RMI的使用
Dubbo: Dubbo是 阿里巴巴公司開源的一個高性能優秀的服務框架,使得應用可通過高性能的 RPC 實現服務的輸出和輸入功能,可以和 Spring框架無縫集成。
詳細內容可以參考:
高性能優秀的服務框架-dubbo介紹
Dubbo是什么?能做什么?
Hessian: Hessian是一個輕量級的remotingonhttp工具,使用簡單的方法提供了RMI的功能。 相比WebService,Hessian更簡單、快捷。采用的是二進制RPC協議,因為采用的是二進制協議,所以它很適合于發送二進制數據。
詳細內容可以參考: Hessian的使用以及理解
Thrift: Apache Thrift是Facebook開源的跨語言的RPC通信框架,目前已經捐獻給Apache基金會管理,由于其跨語言特性和出色的性能,在很多互聯網公司得到應用,有能力的公司甚至會基于thrift研發一套分布式服務框架,增加諸如服務注冊、服務發現等功能。
詳細內容可以參考: 【Java】分布式RPC通信框架Apache Thrift 使用總結
如何進行選擇:是否允許代碼侵入: 即需要依賴相應的代碼生成器生成代碼,比如Thrift。
是否需要長連接獲取高性能: 如果對于性能需求較高的haul,那么可以果斷選擇基于TCP的Thrift、Dubbo。
是否需要跨越網段、跨越防火墻: 這種情況一般選擇基于HTTP協議的Hessian和Thrift的HTTP Transport。
此外,Google推出的基于HTTP2.0的gRPC框架也開始得到應用,其序列化協議基于Protobuf,網絡框架使用的是Netty4,但是其需要生成代碼,可擴展性也比較差。
消息中間件
消息中間件,也可以叫做中央消息隊列或者是消息隊列(區別于本地消息隊列,本地消息隊列指的是JVM內的隊列實現),是一種獨立的隊列系統,消息中間件經常用來解決內部服務之間的 異步調用問題 。請求服務方把請求隊列放到隊列中即可返回,然后等待服務提供方去隊列中獲取請求進行處理,之后通過回調等機制把結果返回給請求服務方。
異步調用只是消息中間件一個非常常見的應用場景。此外,常用的消息隊列應用場景還偷如下幾個:
解耦 : 一個業務的非核心流程需要依賴其他系統,但結果并不重要,有通知即可。
最終一致性 : 指的是兩個系統的狀態保持一致,可以有一定的延遲,只要最終達到一致性即可。經常用在解決分布式事務上。
廣播 : 消息隊列最基本的功能。生產者只負責生產消息,訂閱者接收消息。
錯峰和流控
具體可以參考:
《消息隊列深入解析》
當前使用較多的消息隊列有ActiveMQ(性能差,不推薦使用)、RabbitMQ、RocketMQ、Kafka等等,我們之前提高的redis數據庫也可以實現消息隊列,不過不推薦,redis本身設計就不是用來做消息隊列的。
ActiveMQ: ActiveMQ是Apache出品,最流行的,能力強勁的開源消息總線。ActiveMQ是一個完全支持JMS1.1和J2EE 1.4規范的JMSProvider實現,盡管JMS規范出臺已經是很久的事情了,但是JMS在當今的J2EE應用中間仍然扮演著特殊的地位。
具體可以參考:
《消息隊列ActiveMQ的使用詳解》
RabbitMQ: RabbitMQ 是一個由 Erlang 語言開發的 AMQP 的開源實現。RabbitMQ 最初起源于金融系統,用于在分布式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗
AMQP :Advanced Message Queue,高級消息隊列協議。它是應用層協議的一個開放標準,為面向消息的中間件設計,基于此協議的客戶端與消息中間件可傳遞消息,并不受產品、開發語言等條件的限制。
具體可以參考:
《消息隊列之 RabbitMQ》
RocketMQ:
具體可以參考:
《RocketMQ 實戰之快速入門》
《十分鐘入門RocketMQ》 (阿里中間件團隊博客)
Kafka:Kafka是一個分布式的、可分區的、可復制的、基于發布/訂閱的消息系統,Kafka主要用于大數據領域,當然在分布式系統中也有應用。目前市面上流行的消息隊列RocketMQ就是阿里借鑒Kafka的原理、用Java開發而得。
具體可以參考:
《Kafka應用場景》
《初談Kafka》
推薦閱讀:
《Kafka、RabbitMQ、RocketMQ等消息中間件的對比 —— 消息發送性能和區別》
歡迎關注我的微信公眾號:"Java面試通關手冊"(一個有溫度的微信公眾號,無廣告,單純技術分享,期待與你共同進步~~~堅持原創,分享美文,分享各種Java學習資源。您想關注便關注,
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71317.html
摘要:降級往往會指定不同的級別,面臨不同的異常等級執行不同的處理。談談你對和的認識兩者關系具體可以看公眾號阿里巴巴中間件的這篇文章獨家解讀從微服務框架到微服務生態與并不是競爭關系,作為成熟的框架,其易用性擴展性和健壯性已得到業界的認可。 該文已加入筆主的開源項目——JavaGuide(一份涵蓋大部分Java程序員所需要掌握的核心知識的文檔類項目),地址:https://github.com/...
摘要:降級往往會指定不同的級別,面臨不同的異常等級執行不同的處理。談談你對和的認識兩者關系具體可以看公眾號阿里巴巴中間件的這篇文章獨家解讀從微服務框架到微服務生態與并不是競爭關系,作為成熟的框架,其易用性擴展性和健壯性已得到業界的認可。 該文已加入筆主的開源項目——JavaGuide(一份涵蓋大部分Java程序員所需要掌握的核心知識的文檔類項目),地址:https://github.com/...
摘要:官網源碼推薦從開始手寫一個框架更多請在技術棧微信公眾號后臺回復關鍵字。是一個開放源代碼的對象關系映射框架,它對進行了非常輕量級的對象封裝,它將與數據庫表建立映射關系,是一個全自動的框架。 Java 程序員方向太多,且不說移動開發、大數據、區塊鏈、人工智能這些,大部分 Java 程序員都是 Java Web/后端開發。那作為一名 Java Web 開發程序員必須需要熟悉哪些框架呢? 今天...
摘要:方法,刪除當前線程綁定的這個副本數字,這個值是的值,普通的是使用鏈表來處理沖突的,但是是使用線性探測法來處理沖突的,就是每次增加的步長,根據參考資料所說,選擇這個數字是為了讓沖突概率最小。 showImg(https://segmentfault.com/img/remote/1460000019828633); 老套路,先列舉下關于ThreadLocal常見的疑問,希望可以通過這篇學...
摘要:微軟的雖然引入了事件機制,可以在隊列收到消息時觸發事件,通知訂閱者。由微軟作為主要貢獻者的,則對以及做了進一層包裝,并能夠很好地實現這一模式。 在分布式服務框架中,一個最基礎的問題就是遠程服務是怎么通訊的,在Java領域中有很多可實現遠程通訊的技術,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等,這些名詞之間到底是些什么關系呢,它們背后到底是基...
閱讀 4982·2021-11-25 09:43
閱讀 1685·2021-10-27 14:18
閱讀 1055·2021-09-22 16:03
閱讀 1349·2019-08-30 13:19
閱讀 1572·2019-08-30 11:15
閱讀 1645·2019-08-26 14:04
閱讀 3124·2019-08-23 18:40
閱讀 1166·2019-08-23 18:17