1. 程式人生 > >第3篇 RabbitMQ的5種模式與例項

第3篇 RabbitMQ的5種模式與例項

3.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, 建立消費者並監聽佇列,從佇列中讀取訊息。

3.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可以執行更多的任務。

3.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,建立消費者並監聽佇列,使用手動方式返回完成。可以有多個佇列繫結到交換機,多個消費者進行監聽。

3.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接收到訊息,多個消費者進行監聽。

3.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.#,多個消費者進行監聽。

4.spring整合rabbitmq配置

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

5.總結

RabbitMQ提供了6種模式,分別是HelloWorld,Work Queue,Publish/Subscribe,Routing,Topics,RPC Request/reply,本文詳細講述了前5種,並給出程式碼實現和思路。其中Publish/Subscribe,Routing,Topics三種模式可以統一歸為Exchange模式,只是建立時交換機的型別不一樣,分別是fanout、direct、topic