前言
RabbitMQ是一個(gè)開源的強(qiáng)大的企業(yè)消息系統(tǒng),支持主流的操作系統(tǒng),支持多種開發(fā)語(yǔ)言。我們項(xiàng)目中使用RabbitMQ作為消息隊(duì)列,解耦業(yè)務(wù),構(gòu)建高可靠的消息隊(duì)列系統(tǒng)。RabbitMQ可以用在訂單系統(tǒng)、日志系統(tǒng)、數(shù)據(jù)收集等常見(jiàn)場(chǎng)景中。
本文我們介紹如何在centos上安裝當(dāng)前最新版的RabbitMQ:v3.8.1,以及如何使用Docker來(lái)安裝RabbitMQ。
安裝RabbitMQ
安裝 RabbitMQ 之前要安裝 Erlang,需要先到RabbitMQ官網(wǎng)看下版本對(duì)應(yīng)關(guān)系。
當(dāng)前最新版rabbitmq-server是 3.8.14,最新版Erlang是 23.x。我們可以分別在Github和RabbitMQ官網(wǎng)下載對(duì)應(yīng)的版本的rpm包。
下載 Erlang 的 rpm 包
訪問(wèn) Erlang 的 Github,如下:https://github.com/rabbitmq/erlang-rpm/releases。
# 下載地址
https://github.com/rabbitmq/erlang-rpm/releases/download/v23.3.2/erlang-23.3.2-1.el7.x86_64.rpm
下載 RabbitMQ 的 rpm 包
訪問(wèn) RabbitMQ 的官網(wǎng),如下:https://www.rabbitmq.com/install-rpm.html#downloads。
# 下載地址
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.14/rabbitmq-server-3.8.14-1.el7.noarch.rpm
下載好rpm包后,接下來(lái)我們使用rpm進(jìn)行安裝。
使用 rpm 安裝
首先安裝依賴socat,安裝Erlang時(shí)需要這個(gè)。
yum install -y socat
接下來(lái)安裝Erlang和RabbitMQ。
rpm -ivh erlang-23.3.2-1.el7.x86_64.rpm
rpm -ivh rabbitmq-server-3.8.14-1.el7.noarch.rpm
執(zhí)行上述兩行命令后,即完成了Erlang和RabbitMQ的安裝,就這么簡(jiǎn)單。
啟動(dòng)RabbitMQ:
systemctl start rabbitmq-server
設(shè)置RabbitMQ開機(jī)自啟動(dòng):
systemctl enable rabbitmq-server
RabbitMQ其他操作:
#查看啟動(dòng)后的情況
rabbitmqctl status
#關(guān)閉服務(wù)
rabbitmqctl stop
#重啟rabbitmq
systemctl restart rabbitmq-server
#服務(wù)狀態(tài)
systemctl status rabbitmq-server
#查看所有隊(duì)列
rabbitmqctl list_queues
# 清除某個(gè)隊(duì)列的數(shù)據(jù)
rabbitmqctl purge_queue queueName
# 清除所有隊(duì)列數(shù)據(jù)以及用戶數(shù)據(jù)、配置數(shù)據(jù):慎用,記得要先把MQ 的meta data備份出來(lái),reset后,將meta data導(dǎo)入即可。
rabbitmqctl reset
但是在使用此命令前,要先關(guān)閉應(yīng)用,否則不能清除。關(guān)閉應(yīng)用的命令為:
rabbitmqctl stop_App
執(zhí)行了這兩條命令后再次啟動(dòng)此應(yīng)用。命令為:
rabbitmqctl start_app
再次執(zhí)行命令:
rabbitmqctl list_queues
#查看所有虛擬主機(jī)
rabbitmqctl list_vhosts
#添加用戶:
rabbitmqctl add_user username password
#列出所有用戶:
rabbitmqctl list_users
#刪除用戶:
rabbitmqctl delete_user username
#清除用戶權(quán)限:
rabbitmqctl clear_permissions -p vhostpath username
#列出用戶權(quán)限:
rabbitmqctl list_user_permissions username
#修改密碼:
rabbitmqctl change_password username newpassword
#設(shè)置用戶權(quán)限:
rabbitmqctl set_permissions -p vhostpath username ".*" ".*" ".*"
#創(chuàng)建虛擬主機(jī):
rabbitmqctl add_vhost vhostpath
#列出所以虛擬主機(jī):
rabbitmqctl list_vhosts
#列出虛擬主機(jī)上的所有權(quán)限:
rabbitmqctl list_permissions -p vhostpath
#刪除虛擬主機(jī):
rabbitmqctl delete_vhost vhost vhostpath
#移除所有數(shù)據(jù),要在 rabbitmqctl stop_app 之后使用:
rabbitmqctl reset
#組成集群命令:
rabbitmqctl join_cluster <clusternode> [--ram]
#查看集群狀態(tài):
rabbitmqctl cluster_status
#修改集群節(jié)點(diǎn)的存儲(chǔ)形式:
rabbitmqctl change_cluster_node_type disc | ram
#摘除節(jié)點(diǎn):
rabbitmqctl forget_cluster_node [--offline]
#修改節(jié)點(diǎn)名稱:
rabbitmqctl rename_cluster_node oldnode1 newnode1 [oldnode2 newnode2] [oldnode3 newnode3...]
配置RabbitMQ
1、啟用網(wǎng)頁(yè)版后臺(tái)管理插件:
rabbitmq-plugins enable rabbitmq_management
執(zhí)行如下:
2、新建一個(gè)用戶名為admin,密碼為admin的管理員,并授予管理(administrator)權(quán)限。
rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
執(zhí)行如下:
3、設(shè)置admin可以使用的虛機(jī)權(quán)限。
rabbitmqctl add_vhost admin
rabbitmqctl set_permissions -p admin admin ".*" ".*" ".*"
執(zhí)行如下:
4、插件管理:
#插件列表:
rabbitmq-plugins list
#啟動(dòng)插件:
rabbitmq-plugins enable XXX (XXX為插件名)
#停用插件:
rabbitmq-plugins disable XXX
5、打開后臺(tái)web管理界面:
http://localhost:15672/, 剛才我們?cè)O(shè)置了admin用戶,所以可以使用admin登錄,也可以使用默認(rèn)賬號(hào)和密碼都是guest登錄。進(jìn)入管理界面后可以看到:
使用賬號(hào)/密碼:admin / admin 進(jìn)行登錄,如下:
我們可以在后臺(tái)管理用戶、隊(duì)列等信息。
6、修改RabbitMQ默認(rèn)端口
RabbitMQ默認(rèn)開啟了幾個(gè)端口:
- 4369:erlang發(fā)現(xiàn)口
- 5672:client端通信口,客戶端要連接RabbitMQ服務(wù)時(shí)要用到
- 15672:后臺(tái)管理界面ui端口,進(jìn)入管理后臺(tái)時(shí)訪問(wèn)url如:http://localhost:15672/
- 25672:server間內(nèi)部通信口
有時(shí)候在生產(chǎn)環(huán)境下,我們出于安全等原因希望修改掉默認(rèn)的端口號(hào)。
我們安裝新版的 RabbitMQ-3.8.x 后,發(fā)現(xiàn)找不到它的配置文件,按常理,服務(wù)的端口開發(fā)都可以在配置文件里配置的。但是事實(shí)上RabbitMQ-3.8.1并沒(méi)有生成配置文件,需要我們手動(dòng)添加配置文件。
[root@..]# ls /etc/rabbitmq/rabbitmq.conf
ls: cannot access /etc/rabbitmq/rabbitmq.conf: No such file or directory # 需要手動(dòng)添加
官方建議配置文件的位置:/etc/rabbitmq/rabbitmq.conf
我們現(xiàn)在要做的是把默認(rèn)端口5672改成56720,并且允許遠(yuǎn)程訪問(wèn)。把web管理默認(rèn)端口15672改成56271。只需如下配置:
# vim /etc/rabbitmq/rabbitmq.conf
# AMQP 0-9-1 and 1.0 port,默認(rèn)5672,允許遠(yuǎn)程訪問(wèn)
listeners.tcp.default = 0.0.0.0:56720
# web管理,默認(rèn)15672
management.tcp.port = 56721
management.tcp.ip = 0.0.0.0
執(zhí)行如下:
保存,并重啟RabbitMQ服務(wù)。
systemctl restart rabbitmq-server
systemctl status rabbitmq-server
使?.NETstat -lntp查看端口監(jiān)聽(tīng)情況:
7、其他配置
我們可以到官網(wǎng)地址:https://www.rabbitmq.com/configure.html,了解RabbitMQ的性能優(yōu)化方面的配置。
使用Docker安裝RabbitMQ
在開發(fā)環(huán)境中,我們也可以直接使用 Docker 進(jìn)行安裝更加方便,下面我們繼續(xù)使用Docker來(lái)安裝一遍。
首先,我們得安裝docker環(huán)境。
yum install -y docker
查看docker的版本:
[root@server docker]# docker version
Client:
Version: 1.13.1
API version: 1.26
Package version: docker-1.13.1-208.git7d71120.el7_9.x86_64
Go version: go1.10.3
Git commit: 7d71120/1.13.1
Built: Mon Jun 7 15:36:09 2021
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: docker-1.13.1-208.git7d71120.el7_9.x86_64
Go version: go1.10.3
Git commit: 7d71120/1.13.1
Built: Mon Jun 7 15:36:09 2021
OS/Arch: linux/amd64
Experimental: false
[root@server docker]#
搜索RabbitMQ鏡像:
[root@ ~]# docker search rabbitmq
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
rabbitmq RabbitMQ is an open source multi-protocol me… 3703 [OK]
bitnami/rabbitmq Bitnami Docker Image for RabbitMQ 62 [OK]
tutum/rabbitmq Base docker image to run a RabbitMQ server 22
kbudde/rabbitmq-exporter rabbitmq_exporter for prometheus 15 [OK]
frodenas/rabbitmq A Docker Image for RabbitMQ 12 [OK]
cyrilix/rabbitmq-mqtt RabbitMQ MQTT Adapter 9 [OK]
arm32v7/rabbitmq RabbitMQ is an open source multi-protocol me… 7
拉取RabbitMQ鏡像:
docker pull docker.io/rabbitmq
然后查看鏡像:
[root@server docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/rabbitmq latest ba647756d55a 3 days ago 221 MB
[root@server docker]#
然后運(yùn)行容器:
docker run --name rabbitmq -d -p 5672:5672 -p 15672:15672 -v /data:/var/lib/rabbitmq docker.io/rabbitmq
整理寫一個(gè)重啟服務(wù)腳本:
[root@server docker_rabbitmq]# cat restart_service.sh
#!/bin/sh
basedir=`pwd`
datadir=$basedir/data
image=docker.io/rabbitmq
name=rabbitmq
mkdir -p $datadir
# docker run --name rabbitmq -d -p 5672:5672 -p 15672:15672 -v /data:/var/lib/rabbitmq rabbitmq:3.8.1-management
docker stop $name
docker rm $name
docker run -d --name=$name --restart always -p 5672:5672 -p 15672:15672 -v $datadir:/var/lib/rabbitmq $image
[root@server docker_rabbitmq]#
最后,使用docker ps查看運(yùn)行的容器。
[root@server docker_rabbitmq]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b959544500f4 docker.io/rabbitmq "docker-entrypoint..." 2 seconds ago Up 1 second 4369/tcp, 0.0.0.0:5672->5672/tcp, 5671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp rabbitmq
這樣,一個(gè)RabbitMQ的docker環(huán)境就裝好了。
在Docker 配置RabbitMQ
1、啟用網(wǎng)頁(yè)版后臺(tái)管理插件:
rabbitmq-plugins enable rabbitmq_management
執(zhí)行如下:
[root@server docker_rabbitmq]# docker exec -it rabbitmq bash
root@b959544500f4:/# rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node rabbit@b959544500f4:
rabbitmq_management
The following plugins have been configured:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_prometheus
rabbitmq_web_dispatch
Applying plugin configuration to rabbit@b959544500f4...
The following plugins have been enabled:
rabbitmq_management
started 1 plugins.
root@b959544500f4:/#
此時(shí)可以通過(guò)瀏覽器訪問(wèn)管理頁(yè):http://localhost:15672/
可以通過(guò)默認(rèn)的賬號(hào) guest / guest 登錄如下:
2、新建一個(gè)用戶名為admin,密碼為admin的管理員,并授予管理(administrator)權(quán)限。
rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
執(zhí)行如下:
root@b959544500f4:/# rabbitmqctl add_user admin admin
Adding user "admin" ...
Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more.
root@b959544500f4:/#
root@b959544500f4:/# rabbitmqctl set_user_tags admin administrator
Setting tags for user "admin" to [administrator] ...
root@b959544500f4:/#
3、設(shè)置admin可以使用的虛機(jī)權(quán)限。
rabbitmqctl add_vhost admin
rabbitmqctl set_permissions -p admin admin ".*" ".*" ".*"
執(zhí)行如下:
root@b959544500f4:/# rabbitmqctl add_vhost admin
Adding vhost "admin" ...
root@b959544500f4:/# rabbitmqctl set_permissions -p admin admin ".*" ".*" ".*"
Setting permissions for user "admin" in vhost "admin" ...
root@b959544500f4:/#
4、插件管理:
#插件列表:
rabbitmq-plugins list
#啟動(dòng)插件:
rabbitmq-plugins enable XXX (XXX為插件名)
#停用插件:
rabbitmq-plugins disable XXX
5、配置路徑說(shuō)明
rabbit的配置文件目錄:/etc/rabbitmq
rabbit的數(shù)據(jù)文件目錄:/var/lib/rabbitmq
rabbit的日志文件目錄:/var/log/rabbitmq
如果需要持續(xù)化,可以掛在這些路徑:
# 創(chuàng)建掛在路徑
mkdir -p ~/rabbitmq/{etc,lib,var/{lib,log}}
# 啟動(dòng)容器
docker run -d -p 1883:1883 -p 4369:4369 -p 5671:5671 -p 5672:5672 -p 15672:15672 -p 25672:25672 -p 61613:61613 -p 61614:61614 -v ~/rabbitmq/etc:/etc/rabbitmq -v ~/rabbitmq/lib:/var/lib/rabbitmq -v ~/rabbitmq/log:/var/log/rabbitmq --name rabbit rabbitmq:management
后臺(tái)管理的使用
1、用戶角色
前面我們使用命令行創(chuàng)建了一個(gè)admin用戶,也可以在頁(yè)面上創(chuàng)建,如下:
在這里可以選擇不同的角色來(lái)創(chuàng)建用戶。
角色說(shuō)明:
超級(jí)管理員(administrator)
可登陸管理控制臺(tái),可查看所有的信息,并且可以對(duì)用戶,策略(policy)進(jìn)行操作。
監(jiān)控者(monitoring)
可登陸管理控制臺(tái),同時(shí)可以查看rabbitmq節(jié)點(diǎn)的相關(guān)信息(進(jìn)程數(shù),內(nèi)存使用情況,磁盤使用情況等)
策略制定者(policymaker)
可登陸管理控制臺(tái), 同時(shí)可以對(duì)policy進(jìn)行管理。但無(wú)法查看節(jié)點(diǎn)的相關(guān)信息(上圖紅框標(biāo)識(shí)的部分)。
普通管理者(management)
僅可登陸管理控制臺(tái),無(wú)法看到節(jié)點(diǎn)信息,也無(wú)法對(duì)策略進(jìn)行管理。
其他
無(wú)法登陸管理控制臺(tái),通常就是普通的生產(chǎn)者和消費(fèi)者。
2、創(chuàng)建 vhost 并授權(quán)給用戶
3、開啟 management_agent 插件
下面切換 libai 這個(gè)用戶登錄一下,如下:
提示了這個(gè)告警:
Stats in management UI are disabled on this node
解決措施:
#進(jìn)入rabbitmq容器
docker exec -it {rabbitmq容器名稱或者id} /bin/bash
#進(jìn)入容器后,cd到以下路徑
cd /etc/rabbitmq/conf.d/
#修改 management_agent.disable_metrics_collector = false
echo management_agent.disable_metrics_collector = false > management_agent.disable_metrics_collector.conf
#退出容器
exit
#重啟rabbitmq容器
docker retart {rabbitmq容器id}
下面我們執(zhí)行如下:
# 進(jìn)入配置目錄
root@b959544500f4:/# cd /etc/rabbitmq/conf.d/
root@b959544500f4:/etc/rabbitmq/conf.d# ls
10-default-guest-user.conf management_agent.disable_metrics_collector.conf
root@b959544500f4:/etc/rabbitmq/conf.d#
# 查看當(dāng)前的配置
root@b959544500f4:/etc/rabbitmq/conf.d# cat management_agent.disable_metrics_collector.conf
management_agent.disable_metrics_collector = true
# 修改配置
root@b959544500f4:/etc/rabbitmq/conf.d# echo management_agent.disable_metrics_collector = false > management_agent.disable_metrics_collector.conf
root@b959544500f4:/etc/rabbitmq/conf.d#
# 查看修改后的配置
root@b959544500f4:/etc/rabbitmq/conf.d# cat management_agent.disable_metrics_collector.conf
management_agent.disable_metrics_collector = false
root@b959544500f4:/etc/rabbitmq/conf.d#
root@b959544500f4:/etc/rabbitmq/conf.d# exit
exit
[root@server docker_rabbitmq]# ls
data restart_service.sh
# 重啟容器
[root@server docker_rabbitmq]# docker restart rabbitmq
rabbitmq
[root@server docker_rabbitmq]#
配置完畢后,再訪問(wèn)頁(yè)面如下: