RabbitMQ釋出訂閱模式
這個可能是訊息佇列中最重要的隊列了,其他的都是在它的基礎上進行了擴充套件。
功能實現:一個生產者傳送訊息,多個消費者獲取訊息(同樣的訊息),包括一個生產者,一個交換機,多個佇列,多個消費者。
思路解讀(重點理解):
(1)一個生產者,多個消費者
(2)每一個消費者都有自己的一個佇列
(3)生產者沒有直接發訊息到佇列中,而是傳送到交換機
(4)每個消費者的佇列都繫結到交換機上
(5)訊息通過交換機到達每個消費者的佇列
該模式就是Fanout Exchange(扇型交換機)將訊息路由給繫結到它身上的所有佇列
以使用者發郵件案例講解
注意:交換機沒有儲存訊息功能,如果訊息傳送到沒有繫結消費佇列的交換機,訊息則丟失。
交換機的作用:
生產者傳送訊息不會向傳統方式直接將訊息投遞到佇列中,而是先將訊息投遞到交換機中,在由交換機轉發到具體的佇列,佇列在將訊息以推送或者拉取方式給消費者進行消費,這和我們之前學習Nginx有點類似。
交換機的作用根據具體的路由策略分發到不同的佇列中,交換機有四種類型。
Direct exchange(直連交換機)是根據訊息攜帶的路由鍵(routing key)將訊息投遞給對應佇列的
Fanout exchange(扇型交換機)將訊息路由給繫結到它身上的所有佇列
Topic exchange(主題交換機)佇列通過路由鍵繫結到交換機上,然後,交換機根據訊息裡的路由值,將訊息路由給一個或多個繫結佇列
Headers exchange(頭交換機)類似主題交換機,但是頭交換機使用多個訊息屬性來代替路由鍵建立路由規則。通過判斷訊息頭的值能否與指定的繫結相匹配來確立路由規則。
Rabbit高階佇列(釋出訂閱)
生產者投遞訊息給交換機快取起來(不會直接給佇列),交換機根據路由策略RoutingKey轉發到不同的佇列伺服器中。佇列伺服器再以推送或者拉取形式讓消費者消費。(類似Nginx)
RabbitMQ釋出與訂閱原理:
案例: 使用者註冊 ---> 傳送郵件 --->傳送簡訊