RabbitMq 6種使用模式

RabbitMQ的5種模式與實例

1.1 簡單模式Hello World

功能:一個生產者P發送消息到隊列Q,一個消費者C接收

生產者實現思路:

創建連接工廠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, 創建消費者並監聽隊列,從隊列中讀取消息。

1.2 工作隊列模式Work Queue

功能:一個生產者,多個消費者,每個消費者獲取到的消息唯一,多個消費者只有一個隊列

任務隊列:避免立即做一個資源密集型任務,必須等待它完成,而是把這個任務安排到稍後再做。我們將任務封裝爲消息並將其發送給隊列。後臺運行的工作進程將彈出任務並最終執行作業。當有多個worker同時運行時,任務將在它們之間共享。

生產者實現思路:

創建連接工廠ConnectionFactory,設置服務地址127.0.0.1,端口號5672,設置用戶名、密碼、virtual host,從連接工廠中獲取連接connection,使用連接創建通道channel,使用通道channel創建隊列queue,使用通道channel向隊列中發送消息,2條消息之間間隔一定時間,關閉通道和連接。

消費者實現思路:

創建連接工廠ConnectionFactory,設置服務地址127.0.0.1,端口號5672,設置用戶名、密碼、virtual host,從連接工廠中獲取連接connection,使用連接創建通道channel,使用通道channel創建隊列queue,創建消費者C1並監聽隊列,獲取消息並暫停10ms,另外一個消費者C2暫停1000ms,由於消費者C1消費速度快,所以C1可以執行更多的任務。

1.3 發佈/訂閱模式Publish/Subscribe

功能:一個生產者發送的消息會被多個消費者獲取。一個生產者、一個交換機、多個隊列、多個消費者

生產者:可以將消息發送到隊列或者是交換機。

消費者:只能從隊列中獲取消息。

如果消息發送到沒有隊列綁定的交換機上,那麼消息將丟失。

交換機不能存儲消息,消息存儲在隊列中

生產者實現思路:

創建連接工廠ConnectionFactory,設置服務地址127.0.0.1,端口號5672,設置用戶名、密碼、virtual host,從連接工廠中獲取連接connection,使用連接創建通道channel,使用通道channel創建隊列queue,使用通道channel創建交換機並指定交換機類型爲fanout,使用通道向交換機發送消息,關閉通道和連接。

消費者實現思路:

創建連接工廠ConnectionFactory,設置服務地址127.0.0.1,端口號5672,設置用戶名、密碼、virtual host,從連接工廠中獲取連接connection,使用連接創建通道channel,使用通道channel創建隊列queue,綁定隊列到交換機,設置Qos=1,創建消費者並監聽隊列,使用手動方式返回完成。可以有多個隊列綁定到交換機,多個消費者進行監聽。

1.4 路由模式Routing

說明:生產者發送消息到交換機並且要指定路由key,消費者將隊列綁定到交換機時需要指定路由key

生產者實現思路:

創建連接工廠ConnectionFactory,設置服務地址127.0.0.1,端口號5672,設置用戶名、密碼、virtual host,從連接工廠中獲取連接connection,使用連接創建通道channel,使用通道channel創建隊列queue,使用通道channel創建交換機並指定交換機類型爲direct,使用通道向交換機發送消息並指定key=b,關閉通道和連接。

消費者實現思路:

創建連接工廠ConnectionFactory,設置服務地址127.0.0.1,端口號5672,設置用戶名、密碼、virtual host,從連接工廠中獲取連接connection,使用連接創建通道channel,使用通道channel創建隊列queue,綁定隊列到交換機,設置Qos=1,創建消費者並監聽隊列,使用手動方式返回完成。可以有多個隊列綁定到交換機,但只要綁定key=b的隊列key接收到消息,多個消費者進行監聽。

1.5 通配符模式Topics  

說明:生產者P發送消息到交換機X,type=topic,交換機根據綁定隊列的routing key的值進行通配符匹配;符號#:匹配一個或者多個詞lazy.# 可以匹配lazy.irs或者lazy.irs.cor

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

生產者實現思路:

創建連接工廠ConnectionFactory,設置服務地址127.0.0.1,端口號5672,設置用戶名、密碼、virtual host,從連接工廠中獲取連接connection,使用連接創建通道channel,使用通道channel創建隊列queue,使用通道channel創建交換機並指定交換機類型爲topic,使用通道向交換機發送消息並指定key=key.1,關閉通道和連接。

 

消費者實現思路:

創建連接工廠ConnectionFactory,設置服務地址127.0.0.1,端口號5672,設置用戶名、密碼、virtual host,從連接工廠中獲取連接connection,使用連接創建通道channel,使用通道channel創建隊列queue,綁定隊列到交換機,設置Qos=1,創建消費者並監聽隊列,使用手動方式返回完成。可以有多個隊列綁定到交換機,凡是綁定規則符合通配符規則的隊列均可以接收到消息,比如key.*,key.#,多個消費者進行監聽。

 

 

 

 

2.spring集成rabbitmq配置

Spring提供了AMQP的一個實現,並且spring-rabbit是RabbitMQ的一個實現,下面給出訂閱者模式的事例配置如下:

 

3.總結

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配置。