RabbitMQ 輕鬆入門 5分鐘講解

2022-04-11 11:02:38 字數 2272 閱讀 3290

rabbitmq是乙個輕量級的訊息**中介軟體,它支援多種訊息通訊協議,支援分布式部署,同事也支援執行於多個作業系統,它的靈活、高可用特性是它成為流行mq中介軟體的重要因素。

它在點到點、發布訂閱的基礎上還加入了中間這亂七八糟的一坨。這一坨是高階訊息佇列的關鍵,可以自由地規劃路線,選擇傳送到哪乙個佇列上。具體怎麼路由,客戶端是不必關心的,客戶端只負責如何將訊息投進去,另一邊負責訊息來了如何處理。

訊息生產者(producer):顧名思義產生訊息的一端,也就是傳送資料的一端,比如使用者註冊成功後,伺服器要傳送一封啟用郵件,這個時候,為了提公升效能,點選註冊後肯定立馬回給使用者說你資訊提交成功了,那麼現在快去郵箱找找啟用郵件,使用者幾乎感覺不到時間差了,可是將郵件存到資料庫並推送到郵件伺服器可是會受很多因素控制的,比如網速緩慢,那可能就要很長時間了,所以這一步完全可以做成非同步。我們可以再使用者點選註冊提交表單資訊之後,就產生一條訊息,這個訊息的實體就是郵件內容了。所以這裡訊息生產者是產生郵件的那個角色。(寄信人)

交換器(exchanger):負責接收來自生產者投遞的訊息,並把它轉交給訊息佇列。(快遞)

佇列(queue):負責接收並儲存來自交換器的訊息。(收件人家的信箱)

訊息消費者(consumer):會檢視是否有訊息過來,一旦訊息過來了,它要負責處理這條訊息,比如剛才那封郵件到達訊息佇列了,它要負責取出這封郵件,並將這封郵件處理掉,就算這條訊息被消費了。(收信人)

作為生產者,所做的事情非常簡單,訊息投出去就完事兒了,怎麼投,很容易,指定exchange(交換器)就可以了,我們就可以把資料(也就是訊息)扔進去。

作為交換器,就要麻煩一點了,它不僅要從生產者那裡接過接力棒,要選擇丟給合適的佇列,怎麼投呢,這就是rabbitmq的強大之處了,有下面四種玩法:

1)direct: 介紹這種玩法之前,先了解這裡面的乙個名詞:繫結。(它還有個好聽的英文名:binding, 不知道是先有的漢子還是先有的單詞,反正發音就這麼莫名和諧)。binding就是交換器和佇列之間的連線線(類似於媒人牽的紅線),每乙個線路就是乙個binding,並且都有乙個唯一的識別符號:binding key。當訊息傳送過來的時候,訊息本身會帶上乙個routing key,交換器會根據這兩個key來考慮如何分配路線。好了,回過頭來,那麼direct怎麼玩呢,很簡單粗暴,就是判斷routing key是否等於binding key,完全匹配就丟給binding key對應的那個佇列。

2)topic: 根據生產者傳過來的routing key是否匹配一定的表示式來決定丟給那個佇列,這裡面可以模糊匹配,正則匹配等。

3)fanout: 廣播推送,直接忽略routing key,將訊息丟給所有佇列(比1還要簡單粗暴)

4)headers: 這個和2有點類似,是根據訊息的頭資訊來決定將訊息分給那些佇列。

作為佇列,要做的就是接受exchange過來的訊息,並存在佇列裡面,按先進先出的順序。

作為消費者,就是監視訊息佇列是否有新訊息過來,有的話就讀取並處理掉。整個流程就結束了。

客戶端和rabbitmq打交道的api的幾個重要物件:

connectionfactory,connection,channel

connectionfactory: 是產生connection的工廠

connection:是rabbitmq的socket連線,它封裝了socket協議相關的部分邏輯。connection就是客戶端和rabbitmq的乙個tcp連線,生產者和消費者都是通過connection連線到rabbitmq server的,有點類似sql server的連線。

channel:是客戶端與rabbitmq打交道的最重要的介面,我們大部分的業務操作是通過這個完成的,包括定義queue, exchange, binding, 發布訊息等。

是不是讀到這裡有點疑惑,connection為啥不能代替channel幹這些事情?

channel是建立在tcp連線的基礎上的,也就是必須先滿足connection 物件ready,然後才能通過channel做一些操作的。如果直接在tcp上進行操作(即connection),建立和關閉tcp連線都是需要代價的,我們需要做的操作非常多,頻繁的tcp連線會影響系統效能,並且伺服器的tcp的連線是有限制的,這就限制了系統處理高併發的能力,所以,rabbitmq選擇在tcp連線的基礎上建立channel(虛擬連線),這樣不僅次數不受限制,建立和撤銷的代價也非常小。

下節我們將了解下spring cloud stream和rabbitmq是怎樣整合的。我們可以通過spring cloud stream很方便的使用rabbitmq。

5分鐘入門golang module

golang團隊在版本1.13及以後全面支援module機制,用於結束混亂複雜的專案管理機制。同學們可以簡單的將module機制理解成pip apt get等包管理工具。乙個專案 倉庫 包括多個module 模組 乙個模組包括多個package 包 而乙個包含多個 原始檔。簡單的說,在乙個modul...

5分鐘入門Lindorm SearchIndex

簡介 searchindex是lindorm寬表的二級索引,主要用來幫助業務實現快速的檢索分析。本篇文章介紹如何通過簡單的sql介面操作searchindex。lindorm對外提供統一的標準sql入口,可以讓開發人員快速上手,輕鬆運維海量資料。searchindex是lindorm寬表的二級索引,...

Git 3分鐘輕鬆入門

2.建 3.推 4.刪 5.合 常見問題集 git可以簡單理解為3角陣關係 git clone git 直接在master改不符合規範,先建個自己的分支,b引數直接切到該分支git checkout b test csdn在test csdn分支加了 提交到本地倉庫防止丟失git add git c...