部署安裝RabbitMQ前,先了解下基本概念:(RabbitMQ+Python入門經典] 兔子和兔子窩)
RabbitMQ是一個在AMQP基礎上完整的,可復用的企業消息系統。他遵循Mozilla Public License開源協議。
MQ全稱為Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通信方法。應用程序通過讀寫出入隊列的消息(針對應用程序的數據)來通信,而無需專用連接來鏈接它們。消 息傳遞指的是程序之間通過在消息中發送數據進行通信,而不是通過直接調用彼此來通信,直接調用通常是用於諸如遠程過程調用的技術。排隊指的是應用程序通過 隊列來通信。隊列的使用除去了接收和發送應用程序同時執行的要求。說的籠統點是queue+socket實現
安裝Erlang
在安裝RabbitMQ之前,我們需要安裝Erlang,官方建議使用打包版本,有三個建議的來源:
1、使用官方生成的一個軟件包(https://github.com/rabbitmq/erlang-rpm),它只提供運行RabbitMQ所需要的組件,它可能會也可能不適合運行其他基於Erlang的軟件或第三方RabbitMQ插件
2、使用Erlang官方下載一個rpm包(https://www.erlang-solutions.com/resources/download.html),這個包通常是最新的
3、使用EPEL源來安裝,這種方式安裝的包並不總是最新的
這里我選擇第1種方式:
vim /etc/yum.repos.d/rabbitmq-erlang.repo [rabbitmq-erlang] name=rabbitmq-erlang baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/20/el/7 gpgcheck=1 gpgkey=https://www.rabbitmq.com/rabbitmq-release-signing-key.asc repo_gpgcheck=0 enabled=1 yum install erlang
安裝RabbitMQ服務器
wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.0/rabbitmq-server-3.7.0-1.el7.noarch.rpm rpm --import https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc yum install rabbitmq-server-3.7.0-1.el7.noarch.rpm
啟動服務器
systemctl enable rabbitmq-server systemctl start rabbitmq-server
配置RabbitMQ
在大多數系統上,一個節點應該能夠啟動並運行所有的默認值
生產環境配置后面再詳解
注意:服務器設置為以系統用戶rabbitmq運行 。如果更改節點數據庫或日志的位置,則必須確保文件由該用戶所有(並且還要更新環境變量)
端口訪問
SELinux和類似的機制可能會阻止RabbitMQ綁定到一個端口。發生這種情況時,RabbitMQ將無法啟動 防火牆可以防止節點和CLI工具相互通信。確保可以打開以下端口: 4369:epmd, RabbitMQ節點和CLI工具使用的對等發現服務 5672,5671: 由AMQP 0-9-1和1.0客戶端使用 25672: 由Erlang分配用於節點間和CLI工具通信,並且從動態范圍分配(AMQP端口+20000) 15672: HTTP API客戶端和rabbitmqadmin(僅當管理插件啟用時) 61613,61614:STOMP客戶端沒有和使用TLS(只有STOMP插件已啟用) 1883年,8883:(MQTT客戶端沒有和TLS,如果MQTT插件已啟用) 15674:STOMP-over-WebSockets客戶端(僅在啟用了Web STOMP插件的情況下) 15675:MQTT-over-WebSockets客戶端(僅在啟用了Web MQTT插件的情況下)
默認的用戶訪問
默認將創建一個用戶guest,密碼guest。默認情況下,只有在以localhost身份連接到代理時才能使用這些憑證
調整系統限制
運行生產工作負載的RabbitMQ安裝可能需要系統限制和內核參數調整,以便處理體面的並發連接和隊列。需要調整的主要設置是打開文件的最大數量,也稱為ulimit -n
許多操作系統上的默認值對於消息傳遞代理來說太低(例如,在幾個Linux發行版上為1024)。我們建議在生產環境中為用戶rabbitmq至少允許65536個文件描述符。4096對於大多數開發工作量來說應該是足夠的
有兩個限制操作系統內核允許的最大打開文件數(fs.file-max)和每用戶限制(ulimit -n)。前者必須高於后者
fs.file-max設置
# vim /etc/sysctl.conf,添加: fs.file-max = 65535 # sysctl -p
每用戶限制(ulimit -n)
# vim /etc/security/limits.conf 在最后一行添加如下命令 root soft nofile 65535 root hard nofile 65535 * soft nofile 65535 * hard nofile 65535 # vim /etc/rc.local ulimit -SHn 65535
修改rabbitmq配置
修改rabbitmq配置 修改/etc/systemd/system/multi-user.target.wants/rabbitmq-server.service 在[Service]中,增加LimitNOFILE=30000(具體數值根據需要) 執行systemctl daemon-reload 重啟rabbitmq服務 rabbitmqctl status
修改日志和數據存放路徑
原來的默認位置是/var下, 以下數據在log里面可以查到,一般log 在/var/log.rabbitmq/rabbitmq@usrename.log 中
home dir : /var/lib/rabbitmq
config file(s) : (none) #默認沒有 rabbitmq.conf,可以在/etc/rabbitmq.conf
cookie hash : QuwI6ycYrkUgnpRXQvBoAg==
log(s) : /var/log/rabbitmq/rabbit@c1.log
: /var/log/rabbitmq/rabbit@c1_upgrade.log
database dir : /var/lib/rabbitmq/mnesia/rabbit@c1
創建數據文件和日志文件存放位置的目錄
mkdir /data/rabbitmq/mnesia -p mkdir /data/rabbitmq/log -p chown -R rabbitmq.rabbitmq /data/rabbitmq
創建或新增參數配置文件
[root@c1 ~]# cat /etc/rabbitmq/rabbitmq-env.conf RABBITMQ_MNESIA_BASE=/data/rabbitmq/mnesia RABBITMQ_LOG_BASE=/data/rabbitmq/log
重啟rabbitmq服務
配置文件
Rabbitmq的配置文件有三個,位於/etc/rabbitmq/
- enabled_plugins (設置允許的插件列表)
- rabbitmq.conf (設置rabbitmq的運行參數)
- rabbitmq-env.conf (rabbitmq的環境參數配置)

該配置文檔的格式為erlang的列表格式如
[rabbitmq_management,rabbitmq_visualiser].

tcp_listerners :設置rabbimq的監聽端口,默認為[5672]。 disk_free_limit :磁盤低水位線,若磁盤容量低於指定值則停止接收數據,默認值為 {mem_relative, 1.0},即與內存相關聯1:1,也可定制為多少byte. vm_memory_high_watermark:設置內存低水位線,若低於該水位線,則開啟流控機制,默認值是0.4,即內存總量的40%。 hipe_compile :將部分rabbimq代碼用HighPerformance Erlang compiler編譯,可提升性能,該參數是實驗性,若出現erlang vm segfaults,應關掉。 force_fine_statistics, 該參數屬於rabbimq_management,若為true則進行精細化的統計,但會影響性能。

RABBITMQ_NODE_PORT 端口設置,默認為5672 RABBITMQ_NODENAME 節點名稱,默認為rabbit MNESIA_BASE 后端存儲目錄,默認為/var/lib/rabbitmq/mnesia LOG_BASE 日志目錄,默認為/var/log/rabbitmq/
rabbitmq自帶管理后台,安裝后需要配置開啟
查看插件
rabbitmq-plugins list
開啟網頁監控插件, 開啟15672端口
rabbitmq-plugins enable rabbitmq_management
網頁管理后台默認只允許本地訪問(guest/guest),因此目前我們訪問http://ip:15672是無法登錄的,現在需要添加遠程登錄用戶
# rabbitmqctl add_user <username> <password>
rabbitmqctl add_user heboan heboanpwd
設置遠程登錄(配置權限、寫權限、讀權限)
rabbitmqctl set_permissions -p "/" heboan ".*" ".*" ".*"
設置用戶為管理員
rabbitmqctl set_user_tags heboan administrator
登錄http://<your server ip>:15672 用戶 heboan 密碼 heboanpwd, 然后把guest用戶刪除