什麼是消息中間件?(一)

什麼是消息中間件

消息(Message)就是在各個應用間傳送的數據。

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

消息中間件裏的數據傳遞模式:

  • 點對點(P2P,Point-to-Point):生產者把消息發送到隊列,消費者從隊列中接收消息。
  • 發佈訂閱(Pub/Sub):向一個主題(topic)發佈和訂閱消息,發佈/訂閱模式在消息的一對多廣播時採用。

主流的消息中間件有RabbitMQ、Kafka、ActiveMQ、RocketMQ。

消息中間件的作用

解耦: 消息中間件在處理過程中間插入了一個隱含的、基於數據的接口層,兩邊的處理過程都要實現這一接口,這允許你獨立地擴展或修改兩邊的處理過程,只要確保它們遵守同樣的接口約束即可。

冗餘(存儲): 消息中間件可以把數據進行持久化直到它們已經被完全處理。消費一個消息後需要通知消息中間件已處理完成,確保消息不丟失。

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

削峯: 在訪問量劇增的情況下,利用消息中間件把併發的流量改成順序的串行執行。秒殺場景中可能會用到。

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

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

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

異步通信: 把不是核心主流程的處理邏輯,利用消息中間件的異步處理機制,挪到以後需要的時候再慢慢處理。

RabbitMQ的起源

RabbitMQ是採用Erlang語言實現AMQP(Advanced Message Queuing Protocol,高級消息隊列協議)的消息中間件,它最初起源於金融系統,用於在分佈式系統中存儲轉發消息。

在2006年6月,由Cisco、Redhat、iMatix等聯合制定了AMQP的公開標準,由此AMQP登上了歷史的舞臺。它是應用層協議的一個開放標準,以解決衆多消息中間件的需求和拓撲結構問題。它爲面向消息的中間件設計,基於此協議的客戶端與消息中間件可傳遞消息,並不受產品、開發語言等條件的限制。

RabbitMQ最初版本實現了AMQP的一個關鍵特性:使用協議本身就可以對隊列和交換器(Exchange)這樣的資源進行配置。

RabbitMQ的特點:

  • 可靠性:RabbitMQ使用一些機制來保證可靠性,如持久化、傳輸確認及發佈確認等。
  • 靈活的路由:在消息進入隊列之前,通過交換器來路由消息。
  • 擴展性:多個RabbitMQ節點可以組成一個集羣,也可以根據實際業務情況動態地擴展集羣中節點。
  • 高可用性:隊列可以在集羣中的機器上設置鏡像,使得在部分節點出現問題的情況下隊列仍然可用。
  • 多種協議:RabbitMQ除了原生支持AMQP協議,還支持STOMP、MQTT等多種消息中間件協議。
  • 多語言客戶端:RabbitMQ幾乎支持所有常用語言,比如Java、Python、Ruby、PHP、C#、JavaScript等。
  • 管理界面:RabbitMQ提供了一個易用的用戶界面,使得用戶可以監控和管理消息、集羣中的節點等。
  • 插件機制:RabbitMQ提供了許多插件,以實現從多方面進行擴展,當然也可以編寫自己的插件。

參考 《RabbitMQ實戰指南》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章