下午好,哈布爾! 我想分享一本我設法收集的教科書參考書 RabbitMQ
並濃縮成簡短的建議和結論。
目錄
- RabbitMQ。 第 1 部分:簡介。 Erlang、AMQP 和 RPC
- RabbitMQ。 第 2 部分:了解交換
- RabbitMQ。 第 3 部分:了解隊列和綁定
- RabbitMQ。 第 4 部分:了解訊息和幀是什麼
- RabbitMQ。 第 5 部分:發布和消費消息性能
- RabbitMQ。 第 6 部分:Federation 和 Shovel 模塊概述
- RabbitMQ。 第 7 部分. 有關 Connection 和 Chanel 的詳細信息
- RabbitMQ。 第 8 部分..NET 中的 RabbitMQ
- RabbitMQ。 第 9 部分. 監控
簡單介紹一下AMQP
AMQP(高階訊息佇列協定)是一種用於在系統元件之間傳輸訊息的開放協定。 基本概念是,各個子系統(或獨立應用程式)可以透過 AMQP 代理程式以任意方式交換訊息,該代理執行路由、可能保證交付、分發資料流並訂閱所需的訊息類型。
協議 AMQP
引入三個概念:
exchange
(交換點或交換)- 訊息被送到它。 兌換點 分發消息 在一個或多個隊列中。 她 將消息路由到隊列 基於創建的鏈接(binding
)在他和隊列之間queue
(佇列)- 磁碟或 RAM 中的資料結構 儲存訊息連結並提供訊息副本consumers
(對消費者)binding
(具有約束力)- 一條規則 告訴交換點這些訊息應該進入哪個佇列
協定運行在頂層
簡單介紹一下Erlang
該專案的源代碼位於儲存庫中
Erlang
公司開發的Ericsson
在 1980 年代中期,作為分散式、容錯、即時系統,適用於需要 99,999% 正常運行時間的應用程式。Erlang
用於各種行業和現代應用,例如WhatsApp 架構,Facebook 以 19 億美元收購
簡單介紹一下RabbitMQ
RabbitMQ
實施和補充協議 AMQP
.
訊息傳遞模型的主要思想 RabbitMQ
事情是 producer
(發布者)不會直接將訊息傳送到佇列。 事實上,通常情況下,發布者甚至根本不知道訊息是否會傳遞到任何佇列。
相反,發布者只能將訊息發送到交換器。 一方面,交換器接收來自發布者的消息,另一方面,它將它們發送到佇列。 交換必須確切地知道如何處理它收到的訊息。 是否應該將其添加到特定隊列中? 是否應該將其添加到多個隊列中? 或應該忽略該訊息。
簡短的工作 RabbitMQ
可以描述如下:
- 發布者向特定交易所發送訊息
- 交換器收到一條訊息後,根據它與佇列之間的綁定規則將其路由到一個或多個佇列
- 隊列儲存對此訊息的引用。 訊息本身儲存在 RAM 或磁碟上
- 一旦消費者準備好從隊列接收訊息,伺服器就會透過連結建立訊息的副本並發送
- 消費者收到訊息並向broker發送確認
- 代理收到確認後,會從佇列中刪除訊息的副本。 然後從 RAM 和磁碟中刪除
RPC
過程 RabbitMQ
。 例如,關於客戶條款的初步討論 RabbitMQ
,展示一定的過程 RPC
。 一旦這個序列完成, RabbitMQ
將準備好接受客戶端的請求:
規範中也有 AMQP
客戶端和伺服器都可以發出命令。 這意味著客戶端正在等待與伺服器通訊。 命令是類別和方法。 例如, Connection.Start
– 方法調用 Start
類 Connection
.
連接和頻道
對於客戶端和伺服器之間的此類資訊交換, 頻道。 頻道創建於 具體連接。 每個通道都與其他通道隔離。 在同步情況下,在收到回應之前不可能執行下一個命令。
為了能夠並行發送命令,您必須打開多個通道。 每個通道創建一個單獨的 Erlang
過程。 一個連接可以有多個通道(
使用建立連接和通道的簡單範例
// ...
private void TryConnect()
{
var factory = new ConnectionFactory()
{
HostName = "host_name",
UserName = "user_name",
Password = "p@ssword",
// Включение автоматичекого восстановления
// соединения после сбоев сети
AutomaticRecoveryEnabled = true
};
_connection = factory.CreateConnection();
}
// ...
public void CreateChanel()
{
_channel = _connection.CreateModel();
// other options
}
強烈建議不要為每個操作打開一個新連接,因為這樣 會導致高昂的成本。 通道也應該是持久的,但是許多協定錯誤會導致通道關閉,因此通道的生命週期可能比連接的生命週期短。
RabbitMQ用在哪裡?
在微服務的背景下,協議 AMQP
及其實施 RabbitMQ
經常用於 非同步交互 服務之間。
在上下文中 IIOT
協議 AMQP
及其實施 RabbitMQ
用於伺服器(伺服器-伺服器)之間的資料交換。 也可以使用插件
在下一篇文章中,我們將開始更詳細地了解交易所。
引用
來源: www.habr.com