📬 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 類型

類型路由方式適用場景
Directrouting key 完全匹配點對點任務分發
Fanout廣播到所有綁定的 Queue事件廣播、通知
Topicrouting key 模式匹配(支援 * 和 #)分類訂閱、日誌系統
Headers依訊息 header 屬性路由複雜路由邏輯

常用操作

操作指令
查看佇列清單sudo rabbitmqctl list_queues name messages consumers
查看連線清單sudo rabbitmqctl list_connections
查看 Exchangesudo 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