在系統架構設計中,我們有時會用到訊息佇列,但對對應為什麼需要用到訊息佇列,訊息佇列的引入是否對架構設計有更多的好處方面,我們是否有足夠的認識?
是否存在為了用訊息佇列而引入呢?所以這裡我們需要非常明確我們的架構目標,一般來說,訊息佇列能夠提供以下幾個方面的幫助:
1,保證訊息的傳遞;
如果傳送訊息時接收者不可用,訊息佇列會保留訊息,直到成功地傳遞它;
2,提供非同步的通訊協議;
訊息的傳送者將訊息傳送到訊息佇列後可以立即返回,不用等待接收者的響應,訊息會被儲存在佇列中,直到接收者取出它;
3,解耦;
只要訊息格式不變,即使接收者的介面、位置、或者配置改變,也不會給傳送者帶來任何改變;
而且,訊息傳送者無需知道訊息接收者是誰,使得系統設計更清晰;
相反的,例如,遠端過程呼叫(rpc)或者服務間通過socket建立連線,如果對方介面改變了或者對方ip、埠改變了,那麼另一方需要改寫**或者改寫配置;
4,提供路由;
傳送者無需與接收者建立連線,雙方通過訊息佇列保證訊息能夠從傳送者路由到接收者,甚至對於本來相互網路不通的兩個服務,也可以提供訊息路由。
細節方面的關注:
1,支援併發模式和順序模式
順序模式:
訊息接收後,在訊息接收者來主動刪除這條訊息之前,佇列中的其他訊息不可被接收。這樣保證應用在乙個任務完成後再處理下乙個任務,提供了強順序性
併發模式:
訊息被接收後,訊息接收者主動刪除前,佇列的下乙個訊息仍可被其他應用接收,且可以一直併發獲取下乙個沒有被接收的訊息。
如果訊息被接收後持久(該時間可配)不被刪除,則認為訊息的原接收者處理失敗,訊息重新可見,
可被其他應用再次接收(此特性為容錯處理,「接收順序佇列訊息」的功能也具備該特性)。
2,短暫鎖模式:
乙個訊息不會同時被多個服務接收,這是通過針對訊息的短暫鎖來保證的,訊息的接收者可以指定訊息被鎖定的時間,
如果接收者處理完訊息需要主動將訊息顯示刪除,如果接收者處理訊息失敗了,那麼另乙個服務可以在這個訊息的鎖失效後重新獲得這個訊息。
分布式訊息佇列的設計和使用
在系統架構設計中,我們有時會用到訊息佇列,但對對應為什麼需要用到訊息佇列,訊息佇列的引入是否對架構設計有更多的好處方面,我們是否有足夠的認識?是否存在為了用訊息佇列而引入呢?所以這裡我們需要非常明確我們的架構目標,一般來說,訊息佇列能夠提供以下幾個方面的幫助 1,保證訊息的傳遞 如果傳送訊息時接收者...
分布式訊息佇列
以下是訊息佇列以下的大綱,本文主要介紹訊息佇列概述,訊息佇列應用場景和訊息中介軟體示例 電商,日誌系統 訊息佇列概述 訊息佇列應用場景 訊息中介軟體示例 jms訊息服務 見第二篇 大型 架構系列 分布式訊息佇列 二 常用訊息佇列 見第二篇 大型 架構系列 分布式訊息佇列 二 參考 推薦 資料 見第二...
分布式訊息佇列
訊息佇列中介軟體是分布式系統中重要的元件,主要解決應用耦合,非同步訊息,流量削鋒等問題。實現高效能,高可用,可伸縮和最終一致性架構。是大型分布式系統不可缺少的中介軟體。目前在生產環境,使用較多的訊息佇列有activemq,rabbitmq,zeromq,kafka,metamq,rocketmq等。...