一 rabbitmq 簡介
RabbitMQ 是當今最主流的消息中間件之一。它是一個開源的AMQP實現,服務器端用Erlang語言編寫,支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現優異。
在安裝rabbitmq的時候需要注意rabbitmq 和erlang版本的關系,如果兩者關系不一一對應的話,那么會導致出錯的。
rabbitmq 版本和 erlang 的關系
我們接下來的安裝的版本和環境是:
- 系統平臺:CentOS 7
- erlang版本:21.2
- rabbit-server版本:3.7.12
rabbit-server 默認使用的端口 :
5672(AMQP端口) 和15672(web),還有其他不常用端口未列出,見官網。
如在公網上訪問,需要開放這兩個端口。
二 erlang 安裝
- 2.1 安裝依賴包
yum -y install make gcc gcc-c++ m4 ncurses-devel openssl-devel unixODBC-devel
- 2.2 下載erlang依賴包
cd /tmp && wget http://erlang.org/download/otp_src_21.2.tar.gz
- 2.3 解壓
tar xzf otp_src_21.2.tar.gz
- 2.4 創建文件夾
mkdir /usr/local/erlang
- 2.5 編譯并安裝erlang
cd otp_src_21.2 ./configure --prefix=/usr/local/erlang --without-javac make && make install
- 2.6 添加環境變量
vi + /etc/profile # 添加以下內容 export PATH=$PATH:/usr/local/erlang/bin
- 2.7 讓環境變量生效
source /etc/profile
- 2.8 檢驗安裝
erl -version # 能夠正確輸出下面的內容表示安裝完成 Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 10.2
三 rabbitmq rpm安裝 (二進制安裝和rpm安裝二選一)
安裝rabbitmq前必須先安裝符合要求的erlang
- 3.1 下載RabbitMQ安裝包。
cd /tmp && wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.12/rabbitmq-server-3.7.12-1.el7.noarch.rpm
- 3.2 導入簽名密鑰。
rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
- 3.3 安裝 socat
yum install socat -y
- 3.3 安裝RabbitMQ Server。
yum install rabbitmq-server-3.7.12-1.el7.noarch.rpm
如果在此遇到的錯誤見文章第七點顯示的錯誤收錄
- 3.4 允許RabbitMQ開機自啟動。
systemctl enable rabbitmq-server
- 3.5 啟動RabbitMQ。
systemctl start rabbitmq-server
- 3.6 暫停RabbitMQ。
systemctl stop rabbitmq-server
四 rabbitmq 二進制安裝(rpm 安裝和二進制安裝二選一)
安裝rabbitmq前必須先安裝符合要求的erlang
- 4.1 下載rabbitmq 二進制安裝
cd /tmp && wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.12/rabbitmq-server-generic-unix-3.7.12.tar.xz
- 4.2 解壓
tar -xf rabbitmq-server*.tar.xz
- 4.3 移動到指定路徑
mv /tmp/rabbitmq_server-3.7.12 /usr/local/rabbitmq_server
- 4.4 添加環境變量
vi + /etc/profile # 添加以下內容 export PATH=$PATH:/usr/local/rabbitmq_server/sbin
- 4.5 環境變量生效
source /etc/profile
- 4.6 啟動rabbitmq server
rabbitmq-server
- 4.7 后臺啟動
rabbitmq-server -detached
- 4.8 關閉rabbitmq
rabbitmqctl shutdown
- 4.9 創建配置文件
在 $ RABBITMQ_HOME 的目錄下創建
#rabbitmq 配置文件 touch ./etc/rabbitmq/rabbitmq.conf #rabbitmq 環境變量文件 touch ./etc/rabbitmq/rabbitmq-env.conf
- 4.10 設定 rabbitmq的家目錄路徑
vim ./sbin/rabbitmq-defaults # 修改 SYS_PREFIX = SYS_PREFIX =rabbitmq 家目錄路徑。
五 初始化并配置用戶和啟用web界面
- 5.1 刪除默認用戶
對于生產環境,請刪除默認用戶(guest),默認用戶只能從localhost 連接。
rabbitmqctl delete_user guest
- 5.2 創建新用戶并設置為管理員
建議每個應用程序都使用單獨的用戶。
rabbitmqctl add_user 用戶名 密碼 rabbitmqctl set_user_tags 用戶名 administrator
- 5.3 設置用戶權限
設置用戶djx 具有 /這個virtual host的所有的資源的配置、寫、讀權限
rabbitmqctl set_permissions -p / djx '.*' '.*' '.*'
- 5.4 啟用web 界面
rabbitmq-plugins enable rabbitmq_management
- 5.5 訪問
訪問路徑: http://ip:15672
出現以下界面就意味著搭建成功了
六 常用命令
官網文檔鏈接
- 6.1 查看rabbitmq server 狀態
rabbitmqctl status
- 6.2 查看已用的組件,內存使用情況,警報
rabbitmq-diagnostics status
- 6.3 查看有效的節點配置
rabbitmq-diagnostics environment
- 6.4 對本地節點執行更廣泛的運行狀況檢查
rabbitmq-diagnostics node_health_check
- 6.5 virtual host操作
每個VirtualHost相當于一個相對獨立的RabbitMQ服務器,每個virtual host相互隔離 # 添加virtual host rabbitmqctl add_vhost ${hostname} # 刪除virtual host rabbitmqctl delete_vhost ${hostname} # 列出所有的virtual host rabbitmqctl list_vhosts name tracing # 設置某個用戶對于某個host 的權限 set_permissions [-p vhost] user conf write read 示例1: rabbitmqctl set_permissions -p my-vhost janeway “^janeway-.*” “.*” “.*” 表示設置用戶 janeway 對于host名為 my-vhost的以janeway-為開頭的資源具有讀寫權限 示例2: rabbitmqctl set_permissions -p my-vhost djx “.*” “.*” “.*” 表示設置用戶 djx 對于host名為 my-vhost的所有的資源具有讀寫權限 # 刪除用戶權限 clear_permissions [-p vhost] username 示例: rabbitmqctl clear_permissions -p my-vhost janeway 刪除用戶 janeway 對host my-vhost 的權限 # 查看virtual host已有的用戶和權限 rabbitmqctl list_permissions -p ${主機名}
- 6.6 用戶操作
# 添加用戶 rabbitmqctl add_user {用戶名} {密碼} # 設置用戶角色,除了管理員用戶,還有監控者(monitoring),普通管理者(management),策略制定者(policymaker) management User can access the management plugin policymaker User can access the management plugin and manage policies and parameters for the vhosts they have access to. monitoring User can access the management plugin and see all connections and channels as well as node-related information. administrator User can do everything monitoring can do, manage users, vhosts and permissions, close other user’s connections, and manage policies and parameters for all vhosts. 示例 rabbitmqctl set_user_tags {用戶名} administrator/monitoring/management # 查看用戶列表 rabbitmqctl list_users # 給用戶賦予權限 rabbitmqctl set_permissions -p {virtual host名稱} 用戶名 配置權限 寫權限 讀權限 示例 rabbitmqctl set_permissions -p / djx '.*' '.*' '.*' # 查看用戶權限 rabbitmqctl list_user_permissions {用戶名} # 查看已有的用戶和權限 rabbitmqctl list_permissions -p '{virtual host名}' # 刪除用戶 rabbitmqctl delete_user {用戶名} # 修改用戶的密碼 rabbitmqctl change_password {用戶名} {新密碼}
七 錯誤解決方法
- 問題1
如果在 yum install rabbitmq-server-3.7.12-1.el7.noarch.rpm 遇到了erlang依賴錯誤的話,
實際我們是已經安裝erlang,但是rabbitmq-server 還是檢測不到,我重載了環境變量還是不行。
解決辦法
先忽略依賴問題安裝
rpm -i --nodeps rabbitmq-server-3.7.12-1.el7.noarch.rpm
然后更改rabbitmq的啟動加載的環境配置文件 /usr/lib/rabbitmq/bin/rabbitmq-env。在里面開頭添加
source /etc/profile
或者嘗試方法:添加一個軟連接
ln -s /usr/local/erlang/bin/erl /usr/bin/erl
八 rabbitmq 生產環境應該注意的地方
見文章 RabbitMQ 生產環境配置詳解 http://www.hospitaldelafe.com/Linux/2019-03/157354.htm