1. 程式人生 > >RabbitMQ學習筆記(第一章:Rabbit簡介)

RabbitMQ學習筆記(第一章:Rabbit簡介)

處理機制 有用 都在 參數 ket 統一 宋體 interface 自己

RabbitMQ是目前非常熱門的一款消息中間件,不管是互聯網行業還是傳統行業都在大量地使用。RabbitMQ憑借其高可靠、易擴展、高可用及豐富的功能特性受到了越來越多的企業的青睞。

(一)什麽是消息中間件

消息是指在應用間傳送的數據。信息可以非常簡單,比如只包含文本字符串,JSON等,也可以很復雜,比如內嵌對象。

消息隊列中間件是指利用高效可靠的消息傳遞機制進行與平臺無關的數據交流,並基於數據通信來進行分布式系統的集成。通過提供消息傳遞和消息排隊模型,它可以在分布式環境下擴展進程間的通過。

消息隊列中間件,也可以成為消息隊列或者消息中間件。它一般有兩種傳遞模式:

  1. 點對點(p2p)模式。點對點模式是基於隊列的,消息生產者發送消息到隊列,消息消費者從隊列中接受消息,隊列的存在使得消息的異步傳輸成為可能。
  2. 發布/訂閱(Pub/Sub)模式。發布訂閱模式定義了如何向一個內容節點發布和訂閱消息,這個內容節點成為主題(Topic,主題可以認為是消息傳遞的中介,消息發布者將消息發布到某個主題,而消息訂閱者則從主題中訂閱消息。主題使得消息的訂閱者與消息的發布者互相保持獨立,不需要進行接觸即可保證消息的傳遞,發布/訂閱模式在消息的一對多廣播時采用。

目前開源的消息中間有很多,比如RabbitMQ,Kfaka,ActiveMQ,RocketMQ等。面向消息的中間件提供了松散耦合的靈活方式集成應用程序的一種機制。他們提供了基於存儲和轉發的應用程序之間的異步數據發送,即應用程序彼此不直接通過,而是與作為中間的消息中間件通信。

消息中間件適用於需要可靠的數據傳送的分布式環境。采用消息中間件的系統中,不同的對象之間通過傳遞消息來激活對方的事件,以完成相應的操作。其優點在與能夠在於客戶和服務器之間提供同步和異步的連接,並且在任何時刻都可以將消息進行傳送或者存儲鉆發。

舉例說明,應用程序A與應用程序B通過使用消息中間件的應用程序編程接口(API,Application Program Interface)發送消息來進行通信。

消息中間件將消息路由給應用程序B,這樣消息就可存在與完全不同的計算機上。消息中間件負責處理網絡通信,如果網絡連接不可用,消息中間件會存儲消息,直到連接變得可用,再將消息轉發給應用程序B。靈活性的另一個方面體現在,當應用程序

A發送其消息時,應用程序B甚至可以處於不運行狀態,消息中間件將保留這份消息,直到應用程序B開始執行並消費消息,這樣還防止了應用程序A因為等待應用程序B消費消息而出現阻塞。這種異步通信方式要求應用程序的設計與現在大多數應用不同。不過對於時間無關或者並行處理的場景,它可能是一個極其有用的方法。

(二)消息中間件的作用

消息中間件的作用可以概括如下:

解耦:在項目啟動之初來預測將來會碰到什麽需求是極其困難的。消息中間件在處理過程中間插入了一個隱含的、基於數據的接口層,兩邊的處理過程都要實現這一接口,這允許你獨立的擴展或修改兩邊的處理過程,只要確保它們遵守同樣的接口約束即可。

冗余(存儲):有些情況下,處理數據的過程會失敗。消息中間件可以把數據進行持久化直到它們已經被完全處理,通過這一方式規避了數據丟失的風險。在把一個消息從消息中間件中刪除之前,需要你的處理系統明確地指出該消息已經被處理完成,從而確保你的數據被完全地保存知道你使用完畢。

擴展性:因為消息中間件解耦了應用的處理過程,所以提高消息入隊和處理的效率是很容易的,只要另外增加處理過程即可,不需要改變代碼,也不需要調節參數。

削峰:在訪問量劇增的情況下,應用仍然需要繼續發揮作用,但是這樣的突發流量並不常見。如果以能處理這類峰值為標準而投入資源,無疑是巨大的浪費。使用消息中間件能夠使關鍵組件支撐突發訪問壓力,不會因為突發的超負荷請求而完全崩潰。

可恢復性:當系統一部分組件失效時,不會影響到整個系統。消息中間件降低了進程間的耦合度,所以即使一個處理信息的進程掛掉,加入消息中間件中的信息仍然可以在恢復系統後進行處理。

順序保證:在大多數使用場景下,數據處理的順序和重要,大部分消息中間件支持一定程度上的順尋性。

緩沖:在任何重要的系統中,都會存在需要不通過處理時間的元素。消息中間件通過一個緩沖層來幫助任務最高效率地執行,寫入消息中間件地處理會盡可能快速。該緩沖層有助於控制和優化數據流經過系統地速度。

異步通信:在很多時候應用不想也不需要立即處理消息。消息中間件提供了異步處理機制,允許應用把一些消息放入中間件中,但不立即處理,在之後需要地時候在慢慢處理。

(三)RabbitMQ的特點

RabbitMQ的特點可以概括為以下幾點:

可靠性:RabbitMQ使用一些機制來保證可靠性,如持久化、傳輸確認及發布賬號等。

靈活的路由:在消息進入隊列之前,通過交換器來路由消息。對於典型的路由功能,RabbitMQ已經提供了一些內置的交換器來實現。針對更復雜的路由功能,可以將多個交換器綁定在一起,也可以通過插件機制來實現自己的交換器。

擴展性:多個RabbitMQ節點可以組成一個集群,也可以根據實際業務情況動態的擴展集權中節點。

高可用性:隊列可以在集群中的機器上設置鏡像,使得部分節點問題出現問題的情況下隊列仍然可以使用。

多協議性:RabbitMQ除了原生支持AMQP協議,還支持STOMP,MQTT等多種中間件協議。

多語言客戶端:RabbitMQ幾乎支持所有常用的語言,比如java,Python,Ruby,PHP,C#,Javascript

管理界面:RabbitMQ提供了一個易用的用戶界面,使得用戶可以監控和管理信息、集群中的節點等。

插件機制:RabbitMQ提供了許多插件,以實現從多方面進行擴展,當然也可以編寫自己的插件。

RabbitMQ學習筆記(第一章:Rabbit簡介)