RabbitMQ的5種模式與Activemq的2種模式


一、RabbitMQ的5種模式

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

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 發布/訂閱模式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,創建消費者並監聽隊列,使用手動方式返回完成。可以有多個隊列綁定到交換機,多個消費者進行監聽。

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

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

二、Activemq 的2種模式

1、點對點模式:
只有一個消費者可以接收到消息
不能重復消費
生產者:
$queneName = "/queue/userReg";
消費者:
$stomp->subscribe('/queue/userReg');

2、發布/訂閱模型特點:
多個消費者都可以收到消息
能重復消費
生產者:
$queneName = "/topic/userReg";
消費者:
$stomp->subscribe('/topic/userReg');


免責聲明!

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



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