1. 程式人生 > >【RabbitMQ】——5種佇列

【RabbitMQ】——5種佇列

應用RabbitMQ,我們可以根據需求選擇5種佇列之一。

我的總結

一、簡單佇列

P:訊息的生產者
C:訊息的消費者
紅色:佇列

簡單佇列的生產者和消費者關係一對一
但有時我們的需求,需要一個生產者,對應多個消費者,那就可以採用第二種模式
二、Work模式

一個生產者、2個消費者。
但MQ中一個訊息只能被一個消費者獲取。即訊息要麼被C1獲取,要麼被C2獲取。這種模式適用於類似叢集,能者多勞。效能好的可以安排多消費,效能低的可以安排低消費。

但如果面對我需要多個消費者都對這一訊息進行消費的需求,這種模式顯然就不適用了。那就可以採用第三種模式:

三、訂閱模式
訂閱模式
1、1個生產者,多個消費者
2、每一個消費者都有自己的一個佇列
3、生產者沒有將訊息直接傳送到佇列,而是傳送到了交換機
4、每個佇列都要繫結到交換機
5、生產者傳送的訊息,經過交換機,到達佇列,實現,一個訊息被多個消費者獲取的目的
這種模式可以滿足消費者釋出一個訊息,多個消費者消費同一資訊的需求,但C1、C2消費的都是相同的資料,有時我們需要C1和C2消費的資訊只有部分差異,比如我們需求:C1消費增加的資料,C2消費編輯、增加和刪除的資料。
這是可以引入第四種模式:
四:路由模式:
路由模式


路由模式是在訂閱模式基礎上的完善,可以在生產訊息的時候,加入Key值,與key值匹配的消費者消費資訊。

但路由模式中,就如三中提到的C1、C2、如果C2對應的型別更多,就需要寫很多key值。但其實它只與C1有一點差別。那就可以考慮第五種模式:
五:萬用字元模式
topic模式
萬用字元模式是在路由模式的升級,他允許key模糊匹配。*代表一個詞,#代表一個或多個詞。通過萬用字元模式我們就可以將C1對應的一個key準確定為item.add。而C2我們就不需要一一寫出key值,而是用item.#代替即可。