任務隊列,消息隊列和rpc的區別是什麼?

首先,這幾個概念本就不是同一層次上的東西,自己風馬牛不相及。編程

先說RPC
RPC一般指的是PRC框架(分佈式框架),或者PRC協議,如GRPC,JSON-RPC等。這類框架主要解決遠程通訊間的問題,因此底層的通訊機制是不須要使用者去關心去實現就能很好實現遠程通訊的,最出名的莫過於阿里的dubbo。後端

再說任務隊列
這是個邏輯概念,即好比飯店高峯期時,顧客單子不得不按照下單順序一個個放在廚房,進行前後炒菜處理,這一堆的單子就是任務隊列。架構

最後說消息隊列
消息隊列(MQ)能夠理解成兩個應用程序間(生產者消費者間)的通訊,例如短信發送模塊,由於模塊的發送速度跟不上,這時候須要有一個容器,暫存一下,緩解下壓力,那麼「消息隊列」就是在消息的傳輸過程當中保存消息的「容器」。而後短信模塊就能夠從容不怕的去消息隊列取出要發出的短信內容,進行發送處理。框架


說實話,第一次看到這個問題,真心有點兒暈。在工做中,任務隊列,消息隊列和rpc都是經常使用的實踐方案,可是這三者解決的問題彷佛沒有什麼相關性。如:任務隊列每每是須要大規模處理業務邏輯時,將相關的任務入隊列,進行異步調用,從而解決任務阻塞的問題;消息隊列是異構系統(或者說系統)之間異步通訊的一種方法,主要是用來解決系統間信息同步問題的;而rpc是一種遠程調用方式,是在代碼的實現層面異步調用外部服務用的。就這種描述來看,三者之間的確沒有什麼瓜葛。異步

可是出於好奇,我在網上搜索了這個問題,發現知乎有相同的問題,而且有大神【靈劍】給出了比較專業的答案,我將其答案描述以下。分佈式

任務隊列、消息隊列、rpc是不一樣層次上的東西,任務隊列是邏輯模型,消息隊列是通訊模型,RPC是包含了通訊模型的編程模型(或者框架)。學習

消息隊列(MQ)是一種能實現生產者到消費者單向通訊的通訊模型,通常來講是指實現這個模型的中間件,好比RabbitMQ。它能夠是一個產品,或者是操做系統提供的一種服務之類。操作系統

RPC通常來講是具體指某一種RPC編程框架或協議,如JSON-RPC、GRPC等,它本身有一整套通訊的規範,而在此之上實現什麼功能是能夠定製的。對於RPC來講,調用方不太關心底層的通訊機制,只關心它能實現遠程調用這一點;框架則不太關心上面承載的到底是怎樣的應用,只負責將調用過程發送到執行端,並將結果回傳。中間件

任務隊列則是個邏輯上的概念,即將抽象的任務發送到執行的worker的組件,有的時候包含了後端的worker,有的時候不包含,並無什麼具體的形式,也沒有什麼規範。blog

這三者並無特別大的聯繫,但也不必定是徹底不一樣的東西,好比說RPC能夠經過MQ來實現,而任務隊列能夠經過MQ實現,也能夠利用RPC實現,底層可能都是相同的東西,可是由於暴露出了不一樣性質的接口因此也換了不一樣的名字。以上的區分也不絕對,不少狀況下只是怎麼方便就怎麼叫。

任務隊列是邏輯模型,消息隊列是通訊模型,RPC是包含了通訊模型的編程模型(或者框架),概念清晰,頗有歸納性,這個答案值得讀,也值得了解和學習。尤爲是底層的東西多是相同的,可是封裝以後對於提供的接口和功能起不一樣的名字,更是軟件開發中的廣泛現象。

羣內提供免費的Java架構學習資料,QQ羣:643459718

相關文章
相關標籤/搜索