RabbitMQ教程(一)——安裝配置
一、前言
由於最近在學習RabbitMQ消息隊列,但是鑒於網上對於官網介紹的教程比較少或者由於時間長長期未更新,因此決定將對官網的RabbitMQ入門教程進行翻譯加總結,當然對於有一定英語閱讀能力的同學還是建議直接閱讀官網文檔!
注:本博客寫於2017年8月RabbitMQ官網最新的關於RabbitMQ的介紹,本系列教程均為Java版。
教程地址:https://www.rabbitmq.com/getstarted.html
二、安裝RabbitMQ
操作系統:Ubuntu16.04
1. 安裝RabbitMQ
RabbitMQ需要使用Erlang/OTP來運行,因為RabbitMQ是由Erlang編寫的,所以運行時需要Erlang依賴。Erlang/OTP的版本也可能是過時的,考慮安裝一個更加新的版本,例如19.3,你可以根據你的Ubuntu版本號確定對應的Erlang是否滿足要求
Erlang 發行號 | 提供的版本庫號 |
20.x | 不支持,並將導致從較早的Erlang / OTP版本升級到數據丟失,避免除非本文檔更新,否則建議。 |
19.x | Erlang Solutions, Debian Stretch, Debian Jessie backports, Ubuntu Zesty (17.04) |
18.x | Erlang Solutions, Ubuntu Yakkety (16.10), Ubuntu Xenial (16.04) |
17.x | Erlang Solutions, Debian Jessie, Debian Wheezy backports |
在Ubuntu中,你只需要使用使用如下命令即可直接安裝RabbitMQ以及其所需的Erlang依賴
sudo apt-get update sudo apt-get install rabbitmq-server
以下圖為證,Erlang等一系列依賴項將被安裝:
至此,RabbitMQ已被安裝,非常簡單。
2. 運行RabbitMQ Server
2.1 配置RabbitMQ的環境變量(系統參數)
下載完成之后,配置文件rabbitmq-env.conf默認在/etc/rabbitmq/文件夾下,通過cat顯示文件內容可以看到
cat /etc/rabbitmq/rabbitmq-env.conf
參數:
NODENAME,默認值為rabbit。如果你想在你的一台機器上運行多個rabbitmq時,通過設置rabbitmq的NODENAME參數作為ID加以區分,每台機器上的NODENAME應該不相同。
NODE_IP_ADDRESS,默認值為127.0.0.1。默認綁定到所有可以檢索到的IPV4以及IPV6的地址,如果需要綁定到一個特定的網絡端口或者地址簇時進行設置;
NODE_PORT,默認值為5672。默認端口號為5672,如果發生端口沖突,直接修改端口號即可。
2.2 啟動Server
當RabbitMQ包被安裝后,Server將默認作為守護進程開啟。
如果是管理員(Root),則在Ubuntu系統中直接使用如下命令開啟或停止RabbitMQ Server
開啟:service rabbitmq-server start 關閉:service rabbitmq-server stop
此外,官網給出了如下的提醒:RabbitMQ Server安裝運行后是作為系統用戶rabbitmq的,如果你改變了節點數據庫(node database)或日志文件的位置,你必須確保這些文件被用戶所擁有並且需要更新環境變量。
3. 端口權限
SELinux(安裝在內核的安全模塊,默認包含在:Fedora、Red Hat Enterprise、Debian 以及CentOS)並且類似的機制可能會組織RabbitMQ綁定到特定的端口。當出現這樣的問題時,RabbitMQ可能會啟動失敗。另外防火牆會組織RabbitMQ節點與CLI(命令終端)進行交互,需要確保以下端口的開放:4396,5682,5671,25672,15672,61613,61614,1883,8883,15674,15675。
4. 用戶權限
RabbitMQ默認創建一個用戶名為guest,密碼為guest的用戶,未配置的客戶端通常需要使用這個guest賬號作為登錄憑據。當然guest賬號只能在連接本地localhost時使用,所以,如果你想從其他機器中遠程連接,你就需要進行一定的配置。具體配置創建用戶,刪除guest賬戶,允許guest用戶獲得遠程權限,可以參考官網文檔(暫未寫博,敬請期待):
用戶權限配置:https://www.rabbitmq.com/networking.html
5. 控制Linux上的系統限制
運行生產工作負載的RabbitMQ安裝可能需要系統限制和內核參數調整才能處理大量的並發連接和隊列。需要調整的主要設置是打開文件的最大數量,正如我們所知的:ulimit -n命令。在許多操作系統上的默認值對於消息隊列來說太低了(例如在一些Linux的發行版本上為1024),對於在生產環境中的rabbitmq用戶,我們推薦設置值最少為65536的文件描述符。
其中主要有兩個限制:
第一個是操作系統內核允許的最大打開文件數:fs.file-max
另一個是每個用戶的打開文件限制:ulimit -n
不難發現,前者應該大於后者。
A. 擁有systemd的Linux(最近的Linux發行版)
在這些可以使用systemd的發行版中,操作系統的文件打開上限可以被一個配置文件進行設置
文件位置:/etc/systemd/system/rabbitmq-server.service.d/limits.conf,直接進行編輯設置,例如:
設置LimitNOFILE=300000
B. 沒有systemd的Linux(老版的Linux發行版)
在這些不適用systemd的發行版中最直接的調整每個用戶對於RabbitMQ的限制的方式是:
編輯/etc/default/rabbitmq-server文件的ulimit -n,刪除注釋並且修改值:
或者編輯rabbitmq-env.conf中加入:
ulimit -S -n 4096
將每個用戶的最大打開文件描述符數設置為4096,以在RabbitMQ服務並沒有啟動的時候每次都能被調用。
這個軟件限制不能超過硬件限制(在許多發行版中默認為4096)。 硬限制可以通過/etc/security/limits.conf來增加。 這也需要啟用pam_limits.so模塊並重新登錄或重新啟動。 請注意,運行OS進程不能更改設置。
6. 驗證限制
在RabbitMQ安裝后,會提供RabbitMQ management UI在總覽標簽視圖上顯示可獲得的文件描述符的數量。
其中開啟RabbitMQ Management插件開啟管理的Web界面,開啟命令為:
rabbitmq-plugins enable rabbitmq_management
注意,就像上文提到過的,RabbitMQ默認的guest用戶只能在localhost本地登錄(即在虛擬機中可以打開瀏覽器訪問:localhost:15672,賬號名:guest,密碼:guest)
具體的RabbitMQ管理配置文檔、添加Adminastrator用戶以及開啟遠程連接(暫未寫博,敬請期待):https://www.rabbitmq.com/management.html
可以看到當前打開的文件描述符最大限制為65536,當前已經打開了21個:
或者通過運行命令行,查找出文件描述符的總數等更加詳細的參數:
rabbitmqctl status
詳細參數都打印出來,其中文件描述符(file_discriptors)參數如下:
對於展示運行進程的限制,可以在rabbitmqctl status命令運行后查看pid的值:
然后在命令行輸入cat /proc/$RABBITMQ_BEAM_PROCESS_PID/limits,其中RABBITMQ_BEAM_PROCESS_PID參數值為運行rabbitmqctl status后看到的值,本例中為:
cat /proc/6718/limits
顯示此進程的各種詳細限制如下:
7. 配置管理工具
停止rabbitmq:
rabbitmqctl stop
查看rabbitmq的運行狀態:
rabbitmqctl status
關於rabbitmqctl更多的官網文檔(暫未寫博,敬請期待):https://www.rabbitmq.com/man/rabbitmqctl.1.man.html
8. 日志
來自服務器的輸出將發送到RABBITMQ_LOG_BASE目錄中的RABBITMQ_NODENAME.log文件。其他日志數據寫入RABBITMQ_NODENAME-sasl.log。
消息隊列總是追加到日志文件,所以完整的日志記錄將得到保留。
可以使用logrotate程序進行所有必要的旋轉和壓縮,您可以更改它。默認情況下,此腳本每周在默認的/ var / log / rabbitmq目錄中的文件上運行。
三、小結
RabbitMQ是一個出色的消息隊列,在解耦合、應對高並發以及高吞吐量的場景擁有廣泛的應用,對於RabbitMQ的學習還將進一步深入,敬請期待!