mq全稱:message queue,是在訊息傳輸過程中儲存訊息的容器,在分布式系統通訊中有比較多的應用場景。
對於乙個系統,合理使用mq,可以使應用解耦,提高系統的容錯率。非同步提速,提高系統吞吐量和提公升使用者體驗。同時可以做到削峰填谷,提高系統穩定性。當然,系統中引入了乙個外部的中介軟體,會使系統依賴增多,提高了系統複雜度,一旦mq宕機,會對業務造成影響,所以保持mq的高可用非常重要。
二、rabbitmq的工作模式:
三、生產者訊息確認機制和可靠性投遞
使用mq,訊息傳送方希望能杜絕訊息丟失和投遞失敗的情況,rabbitmq提供了兩種方式,來控制訊息的可靠性投遞。confirm:確認模式,return:回退模式。要明確的是,這是相對於生產者而言的,描述的是訊息是否正確的投遞到佇列中。
訊息流轉的路徑:
producer-broker-exchange-queue-consumer
訊息到達exchange之後,不管成功或者失敗,都有confirmcallback的**,我們可以知道是否投遞成功,從exchannge到queue如果投遞失敗,會有returncallback的**,通過這兩個**就可以直到一條訊息是否成功投遞,如果失敗了,可以進一步處理。
四、消費者訊息簽收機制:consumer ack
消費者是否成功消費訊息非常重要,rabbitmq消費者有三種訊息簽收方式,none:不處理,被消費即從佇列中移出
,manual:手動確認,auto:自動確認。為了保證訊息消費成功,通常為了保證安全性會使用manual這種確認方式。
五、消費者限流-qos
消費者預設一次從mq中讀取一條訊息去消費,可以為消費者配置一次讀取多條訊息。在實際場景,有時併發量大有時併發量低,但是無法約束生產端,所以我們要對消費端限流,保持後端服務的穩定。注意使用消費端限流,消費者確認訊息一定要使用手動確認的方式。
六、ttl特性
ttl全稱是time to live,過期時間,當訊息到達存活時間後如果還沒有被消費,會被自動清除。可以對訊息設定過期時間,也可以對整個佇列設定過期時間。針對對列設定表示整個佇列的訊息都有過期時間。如果兩者都設定了,以時間較短的為準。
七、死信佇列
訊息失效後通過乙個交換機轉到另乙個佇列,這個交換機就叫做死信交換機,這種儲存訊息的方式就是死信佇列。
工作中常有延遲處理的場景,在rabbitmq中是基於ttl特性和死信佇列處理的。當我們一條訊息設定了存活時間投遞到乙個佇列(q1)之後,如果在存活時間內沒有被消費,這個訊息會通過死信交換機**到另乙個佇列(q2),延時處理實際上消費的就是q2。一般來說訊息在以下場景我們會讓訊息存到死信佇列:設定存活時間未被消費、原佇列長度達到限制、消費者拒收訊息,本意是這些訊息失效後不直接丟失,還有再次處理的機會。
還有額外的一點,使用訊息時我們一定要通過**和資料庫各種手段來保證業務的冪等性,這個對資料安全很重要。
RabbitMQ訊息相關概念
當rabbitmq佇列擁有多個消費者時,佇列收到的訊息將以輪詢的分發方式傳送給消費者。每條訊息只會傳送給訂閱列表裡的乙個消費者。這種方式非常適合擴充套件,如果負載加重,那麼只需要建立更多的消費者來消費處理訊息即可。輪詢分發機制也不是那麼優雅,預設有n個消費者,那麼rabbitmq會將第m條訊息分發給...
Linux 常混淆概念
索引節點 inode 要了解鏈結,我們首先得了解乙個概念,叫索引節點 inode 在linux系統中,核心為每乙個新建立的檔案分配乙個inode 索引結點 每個檔案都有乙個惟一的inode號,我們可以將inode簡單理解成乙個指標,它永遠指向本檔案的具體儲存位置。檔案屬性儲存在索引結點裡,在訪問檔案...
RabbitMQ基本概念
總結一下傳送接收訊息的過程 www.wuxidoudizhu.com 通過上面例子對rabbitmq有乙個感性認識後,現在來介紹rabbitmq中的基本概念。broker 訊息佇列伺服器實體 訊息 每個訊息都有乙個路由鍵 routing key 的屬性。就是乙個簡單的字串。connection 應用...