1 為什麼是你? RabbitMQ
RabbitMQ是一個開源的消息代理和隊列伺服器,通過普通協定在完全不同的應用之間共享資料,使用Erlang語言編寫,并且基于AMQP協定.
1.1 大廠們共同的抉擇
- 滴滴、美團、頭條、去哪兒、藝龍...
1.2 得天獨厚的強勢
- 開源,性能優秀,穩定性有保障
- 提供可靠性消息投遞模式(confirm), 傳回模式 ( return )
- 與Spring AMQP完美整合,API豐富
- 叢集模式豐富,表達式配置,HA模式,鏡像隊列模型
- 保證資料不丢失的前提做到高可靠性、可用性
2 高性能之源
- Erlang語言 最初在于交換機領域的架構模式,這樣使得RabbitMQ在Broker之間進行資料互動的性能是非常優秀的
- Erlang的優點: Erlang有着和原生Socket一樣的延遲
3 AMQP協定
- AMQP全稱: Advanced Message Queuing Protocol 進階消息隊列協定
-
AMQP定義
是具有現代特征的二進制協定。 是一個提供統一消息服務的應用層标準進階消息隊列協定,是應用層協定的一個開放标準,為面向消息的中間件設計
4 協定模型

5 AMQP核心概念
- Server: 又稱Broker, 接受用戶端的連接配接,實作AMQP實體服務
- Connection: 連接配接,應用程式與Broker的網絡連接配接
- Channel:網絡信道,幾乎所有的操作都在Channel中進行,Channel是進行消息讀寫的通道。用戶端可建立多個Channel,每個Channel代表一個會話任務
- Message:消息,伺服器和應用程式之間傳送的資料,由Properties和Body組成。Properties可以對消息進行修飾, 比如消息的優先級、延遲等進階特性; Body則就是消息體内容
- Virtual host:虛拟位址,用于進行邏輯隔離,最上層的消息路由.一個Virtual Host裡面可以有若幹個Exchange和Queue,同一個Virtual Host裡面不能有相同名稱的Exchange或Queue
- Exchange:交換機,接收消息,根據路由鍵轉發消息到綁定的隊列
- Binding: Exchange和Queue之間的虛拟連接配接,binding中可以包含routing key
- Routing key:一個路由規則,虛拟機可用它來确定如何路由一個特定消息
- Queue:也稱為Message Queue,消息隊列,儲存消息并将它們轉發給消費者
6 RabbitMQ整體架構與消息流轉
7 安裝
7.1 本節食用指南
- 官網位址: http://www.rabbitmq.com/
- 預先準備:安裝Linux必要依賴包
- 下載下傳RabbitMQ必須安裝包
- 配置檔案修改
7.2 下載下傳及安裝
7.2.1 Ubuntu環境
7.2.2 CentOS7.3
對于初學者,推薦使用一鍵式的RPM安裝方式
- 注意與 erlang 版本的對應關系!
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考
由于筆者使用3.6.5 版本.檢視對應 erlang
- 下載下傳 erlang 環境
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 下載下傳完畢
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - rpm時報錯,缺少依賴
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 解決問題
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 再次 rpm
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 下載下傳 rabbitmq rpm 檔案
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 -
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 安裝報錯
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 下載下傳 socat
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 安裝 socat
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 再次安裝 rebbitmq 即可.
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考
配置檔案
- 預設端口号
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 編輯使用者通路權限.
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 修改如下,暫時本地可通路
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考
7.2.3 macOS
- 下載下傳安裝RabbitMQ
// 更新brew資源
brew update
// 執行安裝
brew install rabbitmq
MQ的安裝目錄在 /usr/local/Cellar/rabbitmq
- 安裝RabiitMQ的可視化監控插件
// 切換到MQ目錄,注意你的安裝版本可能不是3.7.15
cd /usr/local/Cellar/rabbitmq/3.7.15/
// 啟用rabbitmq management插件
sudo sbin/rabbitmq-plugins enable rabbitmq_management
- 配置環境變量
sudo vi /etc/profile
//加入以下兩行
export RABBIT_HOME=/usr/local/Cellar/rabbitmq/3.7.4
export PATH=$PATH:$RABBIT_HOME/sbin
// 立即生效
source /etc/profile
- 背景啟動rabbitMQ
// 背景啟動
rabbitmq-server -detached
// 檢視狀态
rabbitmqctl status
// 通路可視化監控插件的界面
// 浏覽器内輸入 http://localhost:15672,預設的使用者名密碼都是guest,登入後可以在Admin那一列菜單内添加自己的使用者
rabbitmqctl stop 關閉
8 基本使用
8.1 常用指令
- 啟動服務
rabbitmq-server start &
- 停止服務
rabbitmqctl stop_ app
- 管理插件
rabbitmq-plugins enable rabbitmq_ management
8.2 重新開機操作
9 quickstart - 消息的生産與消費
9.1 基本建構缺一不可
- ConnectionFactory:擷取連接配接工廠
- Connection:一個連接配接
- Channel:資料通信信道,可發送和接收消息
- Queue:具體的消息存儲隊列
- Producer & Consumer生産和消費者
9.2 實操示範
- Pro
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - Con
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考
由于是Con端才建立有對列,是以必須先啟動Con端,再啟動Pro端!
分别啟動運作
10 指令行與管控台正常操作
10.1 常用指令行
- rabbitmqctl stop_ app: 關閉應用
- rabbitmqctl start app: 啟動應用
- rabbitmqctl status: 節點狀态
- rabbitmqctl add_ user username password:添加使用者
- rabbitmqctl list users:列出所有使用者
- rabbitmqctl delete_ user username:删除使用者
- rabbitmqctl clear permissions -p vhostpath username:清除使用者權限
- rabbitmqctl list user_ permissions username:列出使用者權限
- rabbitmqctl change_ password username newpassword:修改密碼
- rabbitmqctl set permissions -p vhostpath username
- ".""."".*": 設定使用者權限
- rabbitmqctl add vhost vhostpath:建立虛拟主機
- rabbitmqctl list vhosts: 列出所有虛拟主機
- rabbitmqctl list_ permissions -p vhostpath:列出虛拟主機上所有權限
- rabbitmqctl delete vhost vhostpath:删除虛拟主機
- rabbitmqctl list queues:檢視所有隊列資訊
- rabbitmqctl -p vhostpath purge_ queue blue:清除隊列裡的消息
- rabbitmqctl reset:移除所有資料,要在rabbitmqctl stop_ app之後使用
- rabbitmqctl join_cluster < clusternode > [- -ram] :組成叢集指令
- rabbitmqctl cluster status: 檢視叢集狀态
- rabbitmqctl change_ cluster_ node type disc | ram 修改叢集節點的存儲形式
- rabbitmqctl forget_ cluster_ node [--offline]忘記節點(摘除節點)
- rabbitmqctl rename_cluster_node oldnode1 newnode1 [oldnode2] [newnode2...]修改節點名稱
實操
- 檢視端口占用
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - ctl指令
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考
10.2 管控台的管理
- 主界面
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 主界面-監測全部資訊
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 主界面-目前節點的狀态
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 主界面-目前節點一些存儲路徑
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 主界面-端口号集錦
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 主界面-配置檔案的導入導出
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 管控台connection界面
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 管控台channel界面
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 管控台queues界面
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 管控台Exchanges界面
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 管理者界面-添加使用者
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 管理者界面-添加虛拟主機
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 管理者界面-叢集管理
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考
13 Exchange交換機
Exchange:接收消息,并根據路由鍵轉發消息所綁定的隊列
藍色 - Send Message:把消息投遞到交換機,由路由鍵路由到指定的隊列
13.1 交換機屬性
除交換機類型外,在聲明交換機時還可以附帶許多其他的屬性,其中最重要的幾個分别是:
- Name:交換機名稱
- Type:交換機類型direct、topic、 fanout、 headers
- Durability:是否需要持久化。如果持久化,則RabbitMQ重新開機後,交換機還存在
- Auto-delete:當最後一個綁定到Exchange 上的隊列删除後,自動删除該Exchange
- Internal:目前Exchange是否于RabbitMQ内部使用,預設為False
13.2 交換機類型
交換機主要包括如下4種類型:
Direct exchange(直連交換機)
Fanout exchange(扇型交換機)
Topic exchange(主題交換機)
Headers exchange(頭交換機)
另外RabbitMQ預設定義一些交換機:
預設交換機
amq.* exchanges
還有一類特殊的交換機:Dead Letter Exchange(死信交換機)
13.2.1 Direct Exchange
所有發送到DE的消息被轉發到RouteKey中指定的Queue
注意: Direct模式可以使用RabbitMQ自帶的Exchange: default Exchange,是以不需要将Exchange進行任何綁定(binding)操作,消息傳遞時,RouteKey必須完全比對才會被隊列接收,否則該消息會被抛棄.
13.2.2 Direct Exchange原理示意圖
13.2.3 Direct Exchange實操示範
-
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 -
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考
注意路由key保持一緻!,分别啟動
13.2.2 Topic exchange
盡管使用直接交換改進了我們的系統,它仍然有局限性 - 不能做基于多個标準的路由.
在我們的日志系統中,我們可能不僅要根據嚴重性訂閱日志,還要根據發出日志的源來訂閱日志。你可能從syslog unix工具中了解這個概念,它根據嚴重性(info / warn / crit ...)和facility(auth / cron / kern ...)來路由日志。
這會給我們很多靈活性 - 我們可能想要監聽來自'cron'的關鍵錯誤以及來自'kern'的所有日志。
為了在我們的日志記錄系統中實作這一點,我們需要了解更複雜的主題交換機.
- *可以比對一個單詞
-
可以比對零個或多個單詞。
-
所有發送到Topic Exchange的消息會被轉發到所有關心RouteKey中指
定Topic的Queue上
- Exchange将RouteKey和某Topic進行模糊比對,此時隊列需要綁定一個Topic
13.2.2.1 執行個體1
在這個例子中,我們将發送所有描述動物的消息。消息将與包含三個單詞(兩個點)的routing key一起發送.
routing key中的第一個單詞描述速度,第二顔色,第三是物種:“。。”。
我們建立了三個綁定:Q1綁定了綁定鍵“ .orange.”,Q2綁定了“..rabbit”和“lazy.#”
這些綁定可以總結為:
- Q1對所有橙色動物感興趣
- Q2希望聽到關于兔子的一切,以及關于懶惰動物的一切
routing key設定為“quick.orange.rabbit”的消息将傳遞到兩個隊列。消息“lazy.orange.elephant”也将同時發送給他們.
另一方面
- “quick.orange.fox”隻會轉到第一個隊列
- 而“lazy.brown.fox”隻會轉到第二個隊列
- “lazy.pink.rabbit”将僅傳遞到第二個隊列一次,即使它比對兩個綁定
- “quick.brown.fox”與任何綁定都不比對,是以它将被丢棄。
如果我們違背我們的約定并發送帶有一個或四個單詞的消息,例如“orange” or “quick.orange.male.rabbit”,會發生什麼?好吧,這些消息将不會比對任何綁定,是以将丢失.
另一方面,“lazy.orange.male.rabbit”,雖然它有四個單詞,也會比對最後一個綁定,并将被傳遞到第二個隊列。
執行個體圖
實操示範
-
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 -
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 啟動消費者:
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考
- 啟動生産者:
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考
消費端收到了消息
- 修改比對格式,理論上隻能接受前兩個消息
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 注意在管控台,先将之前的比對綁定取消!
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考
- 顯然僅能接受前兩個消息
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考
小結
主題交換機功能強大,可以像其他交換機一樣運作。
當隊列綁定“#”(哈希)綁定key時 - 它将接收所有消息,而不管routing key - 就像在fanout交換機一樣
當特殊字元“*”(星号)和“#”(哈希)未在綁定中使用時,主題交換機的行為就像直接交換機一樣。
13.2.3 Fanout Exchange
- 不處理路由鍵,隻需要簡單的将隊列綁定到交換機上
- 發送到交換機的消息都會被轉發到與該交換機綁定的所有隊列上
- Fanout交換機轉發消息是最快的
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考
-
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 -
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 啟動消費端
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 不需要routing key
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 啟動生産者後接收到的消息
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考
14 綁定(Binding)
- Exchange和Exchange、Queue之間的連接配接關系
- Binding中可以包含RoutingKey或者參數
15 Queue-消息隊列
- 消息隊列,實際存儲消息資料
- Durability: 是否持久化,Durable: 是,Transient: 否
- Auto delete:如選yes,代表當最後一個監聽被移除之後,該Queue會自動被删除.
16 Message-消息
- 伺服器和應用程式之間傳送的資料
- 本質上就是一段資料,由Properties和Payload ( Body )組成
16.1 常用屬性
delivery mode、headers (自定義屬性)
content_ type. content_ encoding. priority
correlation id. reply to
expiration - 過期時間
這裡就牽涉到RabbitMQ的TTL機制
message_ id
-
- user id. app_ id. cluster id
-
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 -
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - Pro,注意TTL為10s
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 接着啟動Pro,Con接收消息
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考 - 現在5條消息,10s後為0消息全部已清除
RabbitMQ實戰(二)-基礎概念1 為什麼是你? RabbitMQ2 高性能之源3 AMQP協定4 協定模型5 AMQP核心概念6 RabbitMQ整體架構與消息流轉7 安裝8 基本使用9 quickstart - 消息的生産與消費10 指令行與管控台正常操作13 Exchange交換機可以比對零個或多個單詞。14 綁定(Binding)15 Queue-消息隊列16 Message-消息17 總結參考
17 總結
首先講解網際網路大廠為什麼選擇RabbitMQ? RabbitMQ的高性能之道是如何做到的?什麼是AMPQ進階協定?AMPQ核心概念是什麼?RabbitMQ整體架構模型是什麼樣子的?RabbitMQ消息是如何流轉的?RabbitMQ安裝與使用指令行與管控台,RabbitMQ消息生産與消費,RabbitMQ交換機詳解,RabbitMQ隊列、綁定、虛拟主機、消息等...
通過本文的學習,希望大家對RabbitMQ有一個整體的感覺!