天天看點

消息中間件學習筆記--RabbitMQ(二、模式)

AMQP

AMQP,即 Advanced Message Queuing Protocol,進階消息隊列協定,是應用層協定的一個開放标準,為面向消息的中間件設計。消息中間件主要用于元件之間的解耦,消息的發送者無需知道消息使用者的存在,反之亦然。AMQP 的主要特征是面向消息、隊列、路由(包括點對點和釋出/訂閱)、可靠性、安全。

RabbitMQ 是一個開源的 AMQP 實作。

消息路由過程

與 ActiveMQ 拿到消息就直接放在隊列等待消費者拿走不同, Rabbit 拿到消息之後,會先交給 交換機 (Exchange), 然後交換機再根據預先設定的不同綁定( Bindings )政策,來确定要發給哪個隊列。

如圖所示,比起 ActiveMQ 多了 Exchange 和 Bindings。

正式由于有了 Exchange 和 Bindings, RabbitMQ 就可以靈活地支撐各種模式。

交換機有四種模式:Direct, topic, Headers and Fanout

.Direct:direct 類型的行為是”先比對, 再投送”. 即在綁定時設定一個 routing_key, 消息的routing_key 比對時, 才會被交換器投送到綁定的隊列中去.

.Topic:按規則轉發消息(最靈活)

.Headers:設定 header attribute 參數類型的交換機

.Fanout:轉發消息到所有綁定隊列

比較常用的是Direct、Topic、Fanout.

Fanout

這種Fanout模式不處理路由鍵,隻·需要簡單的将隊列綁定到exchange上,一個發送到exchange的消息都會被轉發到與該exchange綁定的所有隊列上。很像廣播子網,每台子網内的主機都獲得了一份複制的消息。Fanout類型的Exchange轉發消息是最快的。

簡單說,就是廣播模式,消息來了,會發送給所有隊列。

消息中間件學習筆記--RabbitMQ(二、模式)

Direct

這種模式會處理路由鍵,也就是所謂的按需索取。需要将一個隊列綁定到exchange上面,要求該消息與一個特定的路由鍵完全比對。消息才會進入到該隊列中。如果一個隊列綁定到該交換機上要求路由鍵 “dog”,則隻有被标記為“dog”的消息才被轉發,不會轉發dog.puppy,也不會轉發dog.guard,隻會轉發dog。

簡單說,就是指定隊列模式, 消息來了,隻發給指定的 Queue, 其他Queue 都收不到。

消息中間件學習筆記--RabbitMQ(二、模式)

Topic

這種模式和Direct模式的原理是一樣的,都是根據路由鍵進行消息的路由,但是這種支援路由鍵的模糊比對,此時隊列需要綁定要一個模式上。符号“#”比對一個或多個詞,符号“*”比對不多不少一個詞。

消息中間件學習筆記--RabbitMQ(二、模式)

參考:

【1】、

https://blog.csdn.net/hao134838/article/details/71710067

【2】、

http://how2j.cn/k/message/message-rabbitmq-type/2031.html

【3】、

http://www.ityouknow.com/springboot/2016/11/30/spring-boot-rabbitMQ.html