📬 RabbitMQ
功能完整的 AMQP 訊息佇列中介軟體
RabbitMQ 實作 AMQP 0-9-1 協定,支援 Direct、Topic、Fanout、Headers 等多種訊息路由模式,適合微服務解耦、非同步任務佇列與事件驅動架構。
安裝
$ # 安裝 Erlang(RabbitMQ 依賴)與 RabbitMQ
curl -1sLf 'https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/setup.deb.sh' | sudo bash
curl -1sLf 'https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/setup.deb.sh' | sudo bash
sudo apt update && sudo apt install -y rabbitmq-server
sudo systemctl enable --now rabbitmq-server$ rabbitmqctl status | head -10啟用 Web 管理介面
$ sudo rabbitmq-plugins enable rabbitmq_management
sudo systemctl restart rabbitmq-server
# 訪問 http://伺服器IP:15672
# 預設帳號 guest 只能從 localhost 登入
預設的
guest 帳號只能從 localhost 登入。遠端存取請建立新的管理員帳號。
使用者與 Virtual Host 管理
$ # 建立管理員帳號
sudo rabbitmqctl add_user admin 安全密碼
sudo rabbitmqctl set_user_tags admin administrator
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
# 建立應用程式用的 Vhost
sudo rabbitmqctl add_vhost myapp
# 建立應用程式使用者
sudo rabbitmqctl add_user appuser 應用密碼
sudo rabbitmqctl set_permissions -p myapp appuser ".*" ".*" ".*"
# 列出使用者
sudo rabbitmqctl list_users核心概念
| 概念 | 說明 |
|---|---|
| Producer(生產者) | 傳送訊息的應用程式 |
| Consumer(消費者) | 接收並處理訊息的應用程式 |
| Exchange(交換機) | 接收 Producer 的訊息並根據路由規則轉發到 Queue |
| Queue(佇列) | 儲存訊息的緩衝區,Consumer 從此讀取 |
| Binding(綁定) | Exchange 與 Queue 之間的路由規則 |
| Virtual Host | 邏輯隔離,類似 Database 的概念 |
Exchange 類型
| 類型 | 路由方式 | 適用場景 |
|---|---|---|
| Direct | routing key 完全匹配 | 點對點任務分發 |
| Fanout | 廣播到所有綁定的 Queue | 事件廣播、通知 |
| Topic | routing key 模式匹配(支援 * 和 #) | 分類訂閱、日誌系統 |
| Headers | 依訊息 header 屬性路由 | 複雜路由邏輯 |
常用操作
| 操作 | 指令 |
|---|---|
| 查看佇列清單 | sudo rabbitmqctl list_queues name messages consumers |
| 查看連線清單 | sudo rabbitmqctl list_connections |
| 查看 Exchange | sudo rabbitmqctl list_exchanges |
| 清空佇列 | sudo rabbitmqctl purge_queue queue_name |
| 刪除佇列 | sudo rabbitmqctl delete_queue queue_name |
| 查看節點狀態 | sudo rabbitmqctl node_health_check |
| 開放防火牆 | sudo ufw allow 5672/tcp && sudo ufw allow 15672/tcp |