建立 Linux 上的 RabbitMQ 訊息佇列
在現代分散式系統架構中,訊息佇列(Message Queue)扮演著至關重要的角色。它不僅能解耦應用程式之間的依賴,還能有效處理高併發下的流量峰值。RabbitMQ 作為目前最流行的開源訊息代理軟體之一,以其穩定的 Erlang 底層、豐富的協議支援以及活躍的社群生態,成為許多開發團隊的首選。
對於中階 Linux 使用者而言,在 Ubuntu 22.04 或 Debian 12 上部署 RabbitMQ 並非難事,但若要確保其穩定運行與安全性,仍需注意一些細節。本文將帶領你逐步完成 RabbitMQ 的安裝、配置與基本驗證,讓你快速建立起可靠的訊息基礎設施。
安裝 RabbitMQ
在 Debian 系的發行版中,最推薦的方式是透過官方提供的 APT 套件庫進行安裝。這樣做不僅能確保你獲得最新的安全更新,還能自動處理依賴關係。
首先,我们需要更新系統的套件索引,並安裝必要的依賴套件,例如 curl 和 gnupg,以便後續下載 GPG 金鑰。
sudo apt update
sudo apt install -y curl gnupg apt-transport-https
接著,匯入 RabbitMQ 官方的 GPG 金鑰,並新增軟體源。由於 RabbitMQ 依賴 Erlang 運行環境,我們也必須同時新增 Erlang 的官方源。
# 匯入 RabbitMQ 金鑰
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
# 新增 RabbitMQ 軟體源
echo "deb [signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://dl.bintray.com/rabbitmq/debian bullseye main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list
# 匯入 Erlang 金鑰並新增源
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/io.erlang.asc > /dev/null
echo "deb [signed-by=/usr/share/keyrings/io.erlang.asc] https://ppa.launchpadcontent.net/rabbitmq/rabbitmq-erlang/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/rabbitmq-erlang.list
# 再次更新索引並安裝 RabbitMQ
sudo apt update
sudo apt install -y rabbitmq-server
安裝過程中,RabbitMQ 服務會自動啟動。你可以透過以下指令確認服務狀態:
sudo systemctl status rabbitmq-server
若看到 active (running) 的訊息,代表安裝成功。
基本配置與管理員帳號建立
預設情況下,RabbitMQ 會建立一個名為 guest 的使用者,密碼也是 guest。然而,出於安全考量,這個帳號僅允許從 localhost 登入。若要從遠端管理或進行生產環境部署,我們需要建立一個新的管理員帳號。
首先,啟用 RabbitMQ 的管理插件(Management Plugin),這將提供一個基於 Web 的介面,方便監控訊息佇列的狀態。
sudo rabbitmq-plugins enable rabbitmq_management
接著,建立新的使用者並賦予管理員權限。假設我們要建立的使用者名稱為 admin,密碼為 StrongPassword123(請務必替換為強密碼):
# 建立使用者
sudo rabbitmqctl add_user admin StrongPassword123
# 設定使用者標籤為管理員
sudo rabbitmqctl set_user_tags admin administrator
# 賦予所有權限
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
完成後,你可以透過瀏覽器訪問 http://你的伺服器IP:15672,使用新建立的管理員帳號登入。預設的 MQTT 端口是 5672,而管理介面的端口是 15672。請務必在防火牆中開放這兩個端口:
sudo ufw allow 5672/tcp
sudo ufw allow 15672/tcp
常見問題與排解
1. 無法遠端連線到 RabbitMQ
許多使用者在安裝後發現無法從其他機器連線到 RabbitMQ。這通常是因為 RabbitMQ 預設監聽的地址是 127.0.0.1。若要允許遠端連線,需要修改 RabbitMQ 的配置文件 /etc/rabbitmq/rabbitmq.conf,確保 listeners.tcp.default 設定為 0.0.0.0:5672。此外,請確認防火牆規則已正確開放端口。
2. 管理介面無法登入
如果你嘗試使用 guest/guest 帳號從非 localhost 的機器登入管理介面,會收到 Access refused 錯誤。這是 RabbitMQ 的安全機制,並非 Bug。請務必使用我們在前述步驟中建立的新管理員帳號進行登入。若忘記密碼,可使用 rabbitmqctl change_password 指令重新設定。
小結
透過本文的步驟,我們已經在 Ubuntu 或 Debian 系統上成功部署了 RabbitMQ,並完成了基本的管理員帳號配置與防火牆設置。這為後續開發訊息驅動型應用奠定了堅實的基礎。
RabbitMQ 的功能遠不止於此,它支援多種交換器(Exchange)類型、佇列綁定以及訊息確認機制。建議你在基礎環境就緒後,進一步探索其高級特性,如叢集部署與高可用性設置,以應對更複雜的生產環境需求。希望這篇文章能幫助你順利起步,若有其他技術問題,歡迎在下方留言討論。