消息隊列 RabbitMq 的五種形式隊列


MQ全稱為Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通信方法.
AMQP(高級消息隊列協議)是一個異步消息傳遞所使用應用層協議規范,為面向消息中間件設計,基於此協議的客戶端與消息中間件可以無視消息來源傳遞消息,不受客戶端、消息中間件、
不同的開發語言環境等條件的限制

概念解釋:
Server(Broker):接收客戶端連接,實現 AMQP 協議的消息隊列和路由功能的進程;
Virtual Host:虛擬主機的概念,類似權限控制組,一個 Virtual Host 里可以有多個 Exchange 和 Queue。
Exchange:交換機,接收生產者發送的消息,並根據 Routing Key 將消息路由到服務器中的隊列 Queue。
ExchangeType:交換機類型決定了路由消息行為,RabbitMQ 中有三種類型 Exchange,分別是 fanout、direct、topic;
Message Queue:消息隊列,用於存儲還未被消費者消費的消息;
Message:由 Header 和 body 組成,Header 是由生產者添加的各種屬性的集合,包括 Message 是否被持久化、優先級是多少、由哪個 Message Queue 接收等;body 是真正需要發送的數據內容;
BindingKey:綁定關鍵字,將一個特定的 Exchange 和一個特定的 Queue 綁定起來。
一、點對點的隊列
生產者實現思路
創建連接工廠 ConnectionFactory,設置服務地址 127.0.0.1,端口號 5672,設置用戶名、密碼、virtual host,從連接工廠中獲取連接 connection,使用連接創建通道 channel,使用通道 channel 創建隊列 queue,使用通道 channel 向隊列中發送消息,關閉通道和連接。
消費者實現思路
創建連接工廠 ConnectionFactory,設置服務地址 127.0.0.1,端口號 5672,設置用戶名、密碼、virtual host,從連接工廠中獲取連接 connection,使用連接創建通道 channel,使用通道 channel 創建隊列 queue, 創建消費者並監聽隊列,從隊列中讀取消息。
二、工作隊列模式 Work Queue
功能描述:一個生產者發送消息到隊列中,有多個消費者共享一個隊列,每個消費者獲取的消息是唯一的。
為了保證服務器同一時刻只發送一條消息給消費者,保證資源的合理利用。channal.basicQos(1); 這樣是為了保證多個消費者接收的消息數量不一樣,能者多勞,如果不設置,那么消費者是平均分配消息(例如 10 條消息,每個消費者接收 5 條)

三、發布 / 訂閱模式 Publish/Subscribe
這個可能是消息隊列中最重要的隊列了,其他的都是在它的基礎上進行了擴展。
功能實現:一個生產者發送消息,多個消費者獲取消息(同樣的消息),包括一個生產者,一個交換機,多個隊列,多個消費者。
思路解讀(重點理解):

(1)一個生產者,多個消費者

(2)每一個消費者都有自己的一個隊列

(3)生產者沒有直接發消息到隊列中,而是發送到交換機

(4)每個消費者的隊列都綁定到交換機上

(5)消息通過交換機到達每個消費者的隊列

ps:交換機沒有存儲消息功能,如果消息發送到沒有綁定消費隊列的交換機,消息則丟失。

四、路由模式 Routing
功能:生產者發送消息到交換機並指定一個路由 key,消費者隊列綁定到交換機時要制定路由 key(key 匹配就能接受消息,key 不匹配就不能接受消息),例如:我們可以把路由 key 設置為 insert ,那么消費者隊列 key 指定包含 insert 才可以接收消息,消費者隊列 key 定義為 update 或者 delete 就不能接收消息。很好的控制了更新,插入和刪除的操作。

五、通配符模式 Topics
說明:此模式實在路由 key 模式的基礎上,使用了通配符來管理消費者接收消息。生產者 P 發送消息到交換機 X,type=topic,交換機根據綁定隊列的 routing key 的值進行通配符匹配;

符號#:匹配一個或者多個詞 lazy.# 可以匹配 lazy.irs 或者 lazy.irs.cor

符號:只能匹配一個詞 lazy. 可以匹配 lazy.irs 或者 lazy.cor

總結
RabbitMQ 提供了 6 種模式,分別是 HelloWorld,Work Queue,Publish/Subscribe,Routing,Topics,RPC Request/reply,本文詳細講述了前 5 種,並給出代碼實現和思路。其中 Publish/Subscribe,Routing,Topics 三種模式可以統一歸為 Exchange 模式,只是創建時交換機的類型不一樣,分別是 fanout、direct、topic。Spring 提供了 rabbitmq 的一個實現,所以集成起來很方便,文章第 4 章給出了訂閱者模式的一種 spring 配置。
來源: http://blog.ituac.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM