RabbitMQ詳解
RabbitMQ詳解
什么是RabbitMQ
使用Erlang語言開發的開源消息隊列系統,基于AMQP協議來實現。AMQP的主要特征是面向消息、隊列、路由(包括點對點和發布/訂閱)、可靠性、安全。AMQP協議更多用在企業系統內對數據一致性、穩定性和可靠性要求很高的場景,對性能和吞吐量的要求還在其次。
AMQP,即Advanced Message Queuing Protocol(高級消息隊列協議),一個提供統一消息服務的應用層標準高級消息隊列協議,是應用層協議的一個開放標準,為面向消息的中間件設計,基于此協議的客戶端與消息中間件傳遞消息,不受客戶端/中間件不同產品、不同開發語言等條件的限制
RabbitMQ比Kafka可靠,Kafka更適合IO高吞吐的處理,一般應用在大數據日志處理或對實時性(少量延遲),可靠性(少量丟數據)要求稍低的場景使用,比如ELK日志收集。
RabbitMQ能做什么
RabbitMQ可以幫助開發者構建可靠、高效、可擴展的分布式系統,實現異步通信、任務分發和事件驅動等功能。它被廣泛應用于各種場景,包括微服務架構、消息驅動的架構、實時數據處理等。
RabbitMQ核心組件

具體:

RabbitMQ工作機制
生產者
消息的創建者,負責創建和推送消息到消息服務器
消費者
消息的接收方,接受消息并處理消息
消息服務器
RabbitMQ本身,不會產生和消費消息,相當于一個中轉站,將生產者的消息路由給消費者
RabbitMQ角色
ConnectionFactory
接管理,應用程序或消費方與RabbitMQ建立連接的管理器
Channel
信道,推送消息的通道
Exchange
交換機,用于接收分配消息到隊列中
Queue
保存消息
Routingkey
消息會攜帶routingKey,決定消息最終的隊列
BindingKey
Queue通過bindingKey與交換機綁定
安裝
【Windows安裝RabbitMQ詳細教程】_rabbitmq安裝教程_慕之寒的博客-CSDN博客
RabbitMQ控制臺介紹
2.1. overview概覽

2.2. Admin用戶和虛擬主機管理
2.2.1. 添加用戶

上面的Tags選項,其實是指定用戶的角色,可選的有以下幾個:
- 超級管理員(administrator)
- 可登陸管理控制臺,可查看所有的信息,并且可以對用戶,策略(policy)進行操作。監控者(monitoring)
- 可登陸管理控制臺,同時可以查看rabbitmq節點的相關信息(進程數,內存使用情況,磁盤使用情況等)策略制定者(policymaker)
- 可登陸管理控制臺, 同時可以對policy進行管理。但無法查看節點的相關信息(上圖紅框標識的部分)。普通管理者(management)
- 僅可登陸管理控制臺,無法看到節點信息,也無法對策略進行管理。其他無法登陸管理控制臺,通常就是普通的生產者和消費者。
2.2.2. 創建虛擬主機

為了讓各個用戶可以互不干擾的工作,RabbitMQ添加了虛擬主機(Virtual Hosts)的概念。其實就是一個獨立的訪問路徑,不同用戶使用不同路徑,各自有自己的隊列、交換機,互相不會影響。2.2.3. 支持的消息模型


5種消息模式
1、簡單模式 HelloWorld
一個生產者、一個消費者,不需要設置交換機(使用 默認的交換機)
2、工作隊列模式 Work Queue
一個生產者、多個消費者(競爭關系),不需要設置交換機(使用默認 的交換機)
3、發布訂閱模式 Publish/subscribe
需要設置類型為fanout的交換機,并且交換機和隊列進行綁定, 當發送消息到交換機后,交換機會將消息發送到綁定的隊列
4、路由模式 Routing
需要設置類型為direct的交換機,交換機和隊列進行綁定,并且指定routing key,當發送消息到交換機后,交換機會根據routing key將消息發送到對應的隊列
5、通配符模式 Topic
需要設置類型為topic的交換機,交換機和隊列進行綁定,并且指定通配符方式的 routing key,當發送消息到交換機后,交換機會根據routing key將消息發送到對應的隊列
五種消息模式詳解:RabbitMQ五大模式輕松理解_rabbitmq模式_風影浪子的博客-CSDN博客
.Net6快速搭建RabbitMQ發布訂閱模式
(使用Asp.Net Core + 控制臺應用)分為三步
- 創建RabbitMQ鏈接
- 搭建生產者
- 搭建消費者
創建RabbitMQ鏈接

可以先創建幫助類,專門用于RabbitMQ連接(需要安裝Nuget包 RabbitMQ.Client)

生產者的搭建
創建一個.Net6項目
在控制器里創建一個生產者控制器

代碼:

以下是代碼里的主要部分
先引用幫助類、來連接RabbitMQ
連接到RabbitMQ控制臺之后,先創建信道

創建交換機的名稱

創建交換機的類型--廣播(會將消息廣播給所有與之綁定的隊列。無論有多少個消費者隊列,每個隊列都會收到完全相同的消息副本。這種模式常用于需要將消息廣播給多個訂閱者的場景,比如日志記錄、通知系統等。
Fanout交換機忽略消息的路由鍵(routing key),因此消息會被發送到所有與之綁定的隊列,而不是根據路由鍵進行篩選和路由。這使得所有的訂閱者都能接收到廣播的消息,無論其感興趣的內容是什么。)如果想要精確傳遞要用到topic類型交換機

創建隊列并綁定交換機,因為是Fanout所以不需要key值

RabbitMQ服務器發生故障或重新啟動,持久化的消息也會被保存,以確保不會丟失。
向交換機寫消息--可以是異常信息

生產者完畢
消費者的構建
創建控制臺應用


該部分代碼使用Lambda表達式定義了一個事件處理程序,當消費者接收到消息時,該事件處理程序將執行以下操作:
- 將從ea.Body中獲取的消息內容轉換為字符串形式,并存儲在message變量中。
- 使用Console.WriteLine方法打印消費者編號、隊列名稱、消費消息的長度以及消費消息的內容。
- 調用channel.BasicAck方法,向RabbitMQ發送ACK確認消息,通知RabbitMQ該條消息已成功處理。
- 程序休眠10毫秒,模擬處理消耗一定時間。
- 增加計數器i的值。
這段代碼主要實現了消費者接收到消息后的處理邏輯,包括打印消息內容、發送ACK確認消息,并進行線程休眠。

浙公網安備 33010602011771號