“RabbitMQ:安装部署”的版本间差异

来自Wikioe
跳到导航 跳到搜索
 
(未显示同一用户的23个中间版本)
第4行: 第4行:
RabbitMQ 快速搭建开发环境,因为 RabbitMQ 使用 Erlang 开发,常规方式安装需要先安装 '''Erlang''',再安装 RabbitMQ 比较麻烦,所以这里推荐使用 '''Docker''' 方式部署,一条命令搞定。
RabbitMQ 快速搭建开发环境,因为 RabbitMQ 使用 Erlang 开发,常规方式安装需要先安装 '''Erlang''',再安装 RabbitMQ 比较麻烦,所以这里推荐使用 '''Docker''' 方式部署,一条命令搞定。


== CentOS 安装 ==
== Docker方式部署 ==
两种方法可以在 RPM 发行版上安装 RabbitMQ 的最新版本:【转自官网: https://www.rabbitmq.com/install-rpm.html】
可以到docker官方镜像仓库找最新版本:'''[https://hub.docker.com/_/rabbitmq https://hub.docker.com/_/rabbitmq]'''
# 使用 [https://www.rabbitmq.com/install-rpm.html#cloudsmith Cloudsmith.io] 或 [https://www.rabbitmq.com/install-rpm.html#package-cloud PackageCloud] 上的 Yum 存储库安装包。(强烈建议使用此选项)
 
# 下载软件包并用 rpm 安装。(需要手动安装所有包依赖项)
=== 安装 ===
: <syntaxhighlight lang="bash" highlight="">
docker run -d --name rabbitmq -h rabbitmq -p 5672:5672 -p 15672:15672 -v /var/lib/rabbitmq:/var/lib/rabbitmq registry.docker-cn.com/library/rabbitmq:3.7
</syntaxhighlight>
: 其中:
:# “'''-d'''”:后台运行容器;
:# “'''--name rabbitmq'''”:将容器的名字设为 rabbitmq;
:# “'''-h rabbitmq'''”:将容器的主机名设为 rabbitmq;
:#* 希望 RabbitMQ 消息数据持久化保存到本地磁盘是需要设置主机名,因为 RabbitMQ 保存数据的目录为主机名。
:# “'''-p 5672:5672'''”:将容器的 5672 端口映射为本地主机的 5672 端口,这样可以通过本地的 5672 端口访问 rabbitmq;
:# “'''-p 15672:15672'''”:同上,容器端口映射到本地端口,15672 用于管理平台。
:# “'''-v /var/lib/rabbitmq:/var/lib/rabbitmq'''”:将容器的 /var/lib/rabbitmq 目录映射为本地主机的 /var/lib/rabbitmq 目录;
:#* 这样可以将 RabbitMQ 消息数据持久化保存到本地磁盘,即使 RabbitMQ 容器被删除,数据依然还在。
 
=== 管理 ===
# 关闭 RabbitMQ 容器:
#: <syntaxhighlight lang="bash" highlight="">
docker stop rabbitmq
</syntaxhighlight>
# 启动 RabbitMQ 容器:
#: <syntaxhighlight lang="bash" highlight="">
docker start rabbitmq
</syntaxhighlight>
 
== CentOS 安装<ref>参考:[https://www.rabbitmq.com/install-rpm.html https://www.rabbitmq.com/install-rpm.html]</ref> ==
两种方法可以在 RPM 发行版上安装 RabbitMQ 的最新版本:
1、'''在线安装''':使用 [https://www.rabbitmq.com/install-rpm.html#cloudsmith Cloudsmith.io] 或 [https://www.rabbitmq.com/install-rpm.html#package-cloud PackageCloud] 上的 Yum 存储库安装包。(强烈建议使用此选项)
2、'''离线安装''':下载软件包并用 rpm 安装。(需要手动安装所有包依赖项)
 
* RabbitMQ RPM 包需要 '''sudo''' 权限才能安装和管理。在 sudo 不可用的环境中,可以考虑使用通用二进制构建。


=== 在线安装:使用 Cloudsmith 上的 YUM 库 ===
=== 在线安装:使用 Cloudsmith 上的 YUM 库 ===
----
----
Cloudsmith 提供了带有 RabbitMQ 包的Yum存储库,还可以通过 yum 安装最新的 Erlang 版本。
Cloudsmith 提供了带有 RabbitMQ 包的 Yum 存储库,还可以通过 yum 安装最新的 Erlang 版本。


==== 安装Yum存储库文件 ====
==== 快速安装(脚本) ====
设置存储库的一种快速方法是使用 Cloudsmith 提供的'''脚本''':
【这不是必须的,但是可以考虑使用,因为它将生成的脚本从公共互联网传输到特定的shell】
: 【这不是必须的,但是可以考虑使用,因为它将生成的脚本从公共互联网传输到特定的shell】
 
使用 Cloudsmith 提供的'''脚本''':
: <syntaxhighlight lang="bash" highlight="">
: <syntaxhighlight lang="bash" highlight="">
## Uses a Cloudsmith-provided Yum repository setup script.
## Uses a Cloudsmith-provided Yum repository setup script.
第22行: 第52行:
</syntaxhighlight>
</syntaxhighlight>


==== 库文件安装 ====
以下步骤展示了一种更传统的安装方式:【上述脚本可以替代以下内容】


传统的库文件安装方式:【使用上述的命令,可以替代以下步骤】
安装步骤:
# Yum 将验证其安装的任何包的签名,因此该过程的第一步是导入签名密钥:
# Yum 将验证其安装的任何包的签名,因此该过程的第一步是'''导入签名密钥''':
#: <syntaxhighlight lang="bash" highlight="">
#: <syntaxhighlight lang="bash" highlight="">
## primary RabbitMQ signing key
## primary RabbitMQ signing key
第33行: 第65行:
rpm --import 'https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key'
rpm --import 'https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key'
</syntaxhighlight>
</syntaxhighlight>
# 为 RabbitMQ 和 Modern Erlang 添加 Yum 存储库:
# 为 RabbitMQ 和 Modern Erlang '''添加 Yum 存储库''':
#: 为了使用Yum存储库,必须在 '''/etc/Yum.repos.d/''' 目录下添加一个 '''.repo''' 文件(例如“rabbitmq.repo”):
#*【为了使用Yum存储库,必须在 '''/etc/Yum.repos.d/''' 目录下添加一个 '''.repo''' 文件(例如“rabbitmq.repo”)】
#: 【.repo 文件根据发行版不同而略有差异,以 CentOS 7 为例】
#*【.repo 文件根据发行版不同而略有差异,以 CentOS 7 为例】
#: <syntaxhighlight lang="bash" highlight="">
#: <syntaxhighlight lang="bash" highlight="">
# In /etc/yum.repos.d/rabbitmq.repo
# In /etc/yum.repos.d/rabbitmq.repo
第136行: 第168行:
type=rpm-md
type=rpm-md
</syntaxhighlight>
</syntaxhighlight>
 
# '''用 Yum 安装“Packages”''':
==== 用Yum安装包 ====
#*【操作根据发行版不同而略有差异,以 CentOS 7 为例】
【操作根据发行版不同而略有差异,以 CentOS 7 为例】
## 更新 Yum 软件包元数据:
 
##: <syntaxhighlight lang="bash" highlight="">
# 更新 Yum 软件包元数据:
#: <syntaxhighlight lang="bash" highlight="">
yum update -y
yum update -y
</syntaxhighlight>
</syntaxhighlight>
# 然后安装软件包:
## 然后安装软件包:
#: <syntaxhighlight lang="bash" highlight="">
##: <syntaxhighlight lang="bash" highlight="">
yum install socat logrotate -y
yum install socat logrotate -y


yum install erlang rabbitmq-server -y
yum install erlang rabbitmq-server -y
</syntaxhighlight>
</syntaxhighlight>
#* logrotate 程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用,可以节省磁盘空间。
##* logrotate 程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用,可以节省磁盘空间。


=== 在线安装:使用 PackageCloud 上的 YUM 库 ===
=== 在线安装:使用 PackageCloud 上的 YUM 库 ===
----
----
PackageCloud 提供了包含 RabbitMQ 包的Yum存储库,也可以用于通过 yum 安装最新的 Erlang 版本。
PackageCloud 提供了包含 RabbitMQ 包的Yum存储库,也可以用于通过 yum 安装最新的 Erlang 版本。


使用示例:[https://blog.csdn.net/weixin_40584261/article/details/106826044 CSDN:Centos7安装RabbitMQ最新版3.8.5,史上最简单实用安装步骤]
==== 快速安装(脚本)<ref>使用示例:[https://blog.csdn.net/weixin_40584261/article/details/106826044 CSDN:Centos7安装RabbitMQ最新版3.8.5,史上最简单实用安装步骤]</ref> ====
【这不是必须的,但是可以考虑使用,因为它将生成的脚本从公共互联网传输到特定的shell】


==== 安装Yum存储库文件 ====
使用 PackageCloud 提供的'''脚本''':
设置存储库的一种快速方法是使用 PackageCloud 提供的'''脚本''':
: 【这不是必须的,但是可以考虑使用,因为它将生成的脚本从公共互联网传输到特定的shell】
: <syntaxhighlight lang="bash" highlight="">
: <syntaxhighlight lang="bash" highlight="">
## Uses a PackageCloud-provided Yum repository setup script.
## Uses a PackageCloud-provided Yum repository setup script.
第167行: 第196行:
</syntaxhighlight>
</syntaxhighlight>


==== 库文件安装 ====
以下步骤展示了一种更传统的安装方式:【上述脚本可以替代以下内容】


传统的库文件安装方式:【使用上述的命令,可以替代以下步骤】
安装步骤:
# Yum 将验证其安装的任何包的签名,因此该过程的第一步是导入签名密钥:
# Yum 将验证其安装的任何包的签名,因此该过程的第一步是'''导入签名密钥''':
#: <syntaxhighlight lang="bash" highlight="">
#: <syntaxhighlight lang="bash" highlight="">
## primary RabbitMQ signing key
## primary RabbitMQ signing key
第178行: 第209行:
rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
</syntaxhighlight>
</syntaxhighlight>
# 为 RabbitMQ 和 Modern Erlang 添加 Yum 存储库:
# 为 RabbitMQ 和 Modern Erlang '''添加 Yum 存储库''':
#: 为了使用Yum存储库,必须在 '''/etc/Yum.repos.d/''' 目录下添加一个 '''.repo''' 文件(例如“rabbitmq.repo”):
#*【为了使用Yum存储库,必须在 '''/etc/Yum.repos.d/''' 目录下添加一个 '''.repo''' 文件(例如“rabbitmq.repo”)】
#: 【.repo 文件根据发行版不同而略有差异,以 CentOS 7 为例】
#*【.repo 文件根据发行版不同而略有差异,以 CentOS 7 为例】
#: <syntaxhighlight lang="bash" highlight="">
#: <syntaxhighlight lang="bash" highlight="">
# In /etc/yum.repos.d/rabbitmq.repo
# In /etc/yum.repos.d/rabbitmq.repo
第240行: 第271行:
metadata_expire=300
metadata_expire=300
</syntaxhighlight>
</syntaxhighlight>
 
# '''用 Yum 安装“Packages”''':
==== 用Yum安装包 ====
#* 【操作根据发行版不同而略有差异,以 CentOS 7 为例】
【操作根据发行版不同而略有差异,以 CentOS 7 为例】
## 更新 Yum 软件包元数据:
 
##: <syntaxhighlight lang="bash" highlight="">
# 更新 Yum 软件包元数据:
#: <syntaxhighlight lang="bash" highlight="">
yum update -y
yum update -y
</syntaxhighlight>
</syntaxhighlight>
# 然后安装软件包:
## 然后安装软件包:
#: <syntaxhighlight lang="bash" highlight="">
##: <syntaxhighlight lang="bash" highlight="">
## install these dependencies from standard OS repositories
## install these dependencies from standard OS repositories
yum install socat logrotate -y
yum install socat logrotate -y
第255行: 第284行:
yum install --repo rabbitmq_erlang --repo rabbitmq_server erlang rabbitmq-server -y
yum install --repo rabbitmq_erlang --repo rabbitmq_server erlang rabbitmq-server -y
</syntaxhighlight>
</syntaxhighlight>
#* logrotate 程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用,可以节省磁盘空间。
##* logrotate 程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用,可以节省磁盘空间。


=== 离线安装 ===
=== 离线安装 ===
----
----
离线安装的最大问题就是需要自行解决依赖项,以及选择兼容的版本。
离线安装的最大问题就是需要自行解决依赖项,以及选择兼容的版本。
 


注意:
注意:
* RabbitMQ 依赖于 Erlang,而 Erlang 内存管理依赖 Socat,因此要首先安装 '''Erlang''' '''socat'''
* RabbitMQ 依赖于 '''Erlang''',而 Erlang 内存管理依赖 '''Socat''',因此要首先安装 Erlang 与 socat;
* Erlang 与 RabbitMQ 版本需要兼容,可以在“'''[https://www.rabbitmq.com/which-erlang.html https://www.rabbitmq.com/which-erlang.html]'''”查看。
* Erlang 与 RabbitMQ 版本需要兼容,可以在“'''[https://www.rabbitmq.com/which-erlang.html https://www.rabbitmq.com/which-erlang.html]'''”查看。
* 离线安装的包,可以自行下载然后上传到服务器,也可以通过服务器的 '''wget''' 工具直接下载:
* 离线安装的包,可以自行下载然后上传到服务器,也可以通过服务器的 '''wget''' 工具直接下载:
*# rabbitmq-server包下载地址: https://github.com/rabbitmq/rabbitmq-server/releases
*# '''rabbitmq-server包'''下载地址:“'''[https://github.com/rabbitmq/rabbitmq-server/releases https://github.com/rabbitmq/rabbitmq-server/releases]'''”
*# erlang包下载地址: https://github.com/rabbitmq/erlang-rpm/releases
*# '''erlang包'''下载地址:“'''[https://github.com/rabbitmq/erlang-rpm/releases https://github.com/rabbitmq/erlang-rpm/releases]'''”
*# socat包下载地址: https://pkgs.org/download/socat 【socat 使用 yum 安装最新版本即可】
*# '''socat包'''下载地址:“'''[https://pkgs.org/download/socat https://pkgs.org/download/socat]'''” 【socat 使用 yum 安装最新版本即可】
* 对于基于RPM的发行版,现代 Erlang 提供了三种替代来源:(Erlang 在默认的 yum 存储库中不可用)
*# '''RabbitMQ团队''':只提供运行 RabbitMQ 所需的组件,官方称'''零依赖项''',容易安装。【如果Erlang只是用来提供运行RabbitMQ的,推荐使用】
*# '''Erlang官方''':通常是相当最新的,并且涉及潜在的过多依赖关系列表的安装。【如果还需要Erlang做相关开发或运行环境,可选择使用】
*# '''EPEL源''':这些版本通常已经过时,不能用于运行最新的 RabbitMQ 版本。【不推荐】
*#* P.S.:如果要使用 EPEL 存储库,需要通过 yum 安装先安装 EPEL 存储库:
*#*: <syntaxhighlight lang="bash" highlight="">
# 先安装epel存储库
yum -y install epel-release
 
# 再安装 Erlang、socat
yum -y install erlang socat
</syntaxhighlight>




【参照 Erlang 与 RabbitMQ 版本要求,以“erlang-23.3.1-1.el7.x86_64.rpm”与“rabbitmq-server-3.8.14-1.el7.noarch.rpm”为例】


步骤如下:【参照 Erlang 与 RabbitMQ 版本要求,以 Erlang 与 RabbitMQ 为例】
步骤如下:
# 安装 Erlang:
# 安装 Erlang:
#: <syntaxhighlight lang="bash" highlight="">
#: <syntaxhighlight lang="bash" highlight="">
rpm -Uvh http://www.rabbitmq.com/releases/erlang/erlang-18.1-1.el7.centos.x86_64.rpm
wget https://github.com/rabbitmq/erlang-rpm/releases/download/v23.3.1/erlang-23.3.1-1.el7.x86_64.rpm
rpm -ivh erlang-23.3.1-1.el7.x86_64.rpm
</syntaxhighlight>
</syntaxhighlight>
#: 查看 Erlang 版本:
#: 查看 Erlang 版本:
#: <syntaxhighlight lang="bash" highlight="">
#: <syntaxhighlight lang="bash" highlight="">
erl -version
erl -version
</syntaxhighlight>
# 安装 Socat:
#: <syntaxhighlight lang="bash" highlight="">
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/socat-1.7.3.2-2.el7.x86_64.rpm
rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
# 或者:
yum install socat
</syntaxhighlight>
</syntaxhighlight>
# 安装 RabbitMQ:
# 安装 RabbitMQ:
#: <syntaxhighlight lang="bash" highlight="">
#: <syntaxhighlight lang="bash" highlight="">
rpm -Uvh http://www.rabbitmq.com/releases/rabbitmq-server/v3.5.6/rabbitmq-server-3.5.6-1.noarch.rpm
# 首先导入密钥
rpm -import https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.14/rabbitmq-server-3.8.14-1.el7.noarch.rpm.asc
 
# 下载、安装
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.14/rabbitmq-server-3.8.14-1.el7.noarch.rpm
rpm -ivh rabbitmq-server-3.8.14-1.el7.noarch.rpm
</syntaxhighlight>
</syntaxhighlight>


=== 启动 ===
== 升级 ==
<syntaxhighlight lang="bash" highlight="">
如果是 rabbitmq-server 的版本升级跨越稍微比较大,那么erlang版本就可能也需要升级。
#启动服务
systemctl start rabbitmq-server
【升级 rabbitmq-sever 服务前,先停止 rabbitmq 服务和升级 erlang 版本。】


#查看状态
相关命令:
systemctl status rabbitmq-server
: <syntaxhighlight lang="bash" highlight="">
rabbitmqctl stop


#设置为开机启动
# 升级erlang版本
systemctl enable rabbitmq-server
rpm -Uvh erlang-23.3.1-1.el7.x86_64.rpm
 
rpm -Uvh rabbitmq-server-3.8.14-1.el7.noarch.rpm
</syntaxhighlight>
</syntaxhighlight>
:* 安装服务的命令参数是 '''-i''' 即 install,而升级服务的命令参数为 '''-U''' 即 upgrade。
== 启动 ==
参见:<big>'''[[RabbitMQ:命令行、管理平台#启动命令]]'''</big>
== 配置 ==
=== 查看日志 ===
RabbitMQ 日志文件位于'''/var/log/rabbitmq'''目录下:
: [[File:RabbitMQ:查看日志.png|600px]]
* RabbitMQ启动时,会在'''/etc/rabbitmq'''下寻找'''rabbitmq.config'''文件。
*: 可以自己创建这个文件,或下载 RabbitMQ 的配置文件模板然后按照需求更改;


=== 启用管理平台插件 ===
=== 启用管理平台插件 ===
<syntaxhighlight lang="bash" highlight="">
RabbitMQ 安装后默认是不启动管理模块的,所以需要配置将管理模块启动:
# 查看安装的插件:
#: <syntaxhighlight lang="bash" highlight="">
rabbitmq-plugins list
</syntaxhighlight>
# 启用插件:
#: <syntaxhighlight lang="bash" highlight="">
rabbitmqctl start_app
 
rabbitmq-plugins enable rabbitmq_management
rabbitmq-plugins enable rabbitmq_management
rabbitmqctl stop
#重启rabbitmq
systemctl restart rabbitmq
</syntaxhighlight>
</syntaxhighlight>
* 访问 '''[http://localhost:15672 http://localhost:15672]''' 就能进入管理平台了(默认账号和密码:guest / guest)。


=== 配置防火墙端口 ===
防火墙允许远程访问端口:
: <syntaxhighlight lang="bash" highlight="">
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --zone=public --add-port=5672/tcp --permanent
firewall-cmd --reload
</syntaxhighlight>
* 访问 '''[http://xxxx.xxxx.xxxx.xxxx:15672 http://xxxx.xxxx.xxxx.xxxx:15672]''' 就能进入管理平台了(默认账号和密码:guest / guest)。


=== 开启用户远程访问 ===
默认情况下,RabbitMQ 的默认的guest用户只允许本机访问。
    即:如果使用 guest 登录:[http://xxxx.xxxx.xxxx.xxxx:15672 http://xxxx.xxxx.xxxx.xxxx:15672] 会提示“login failed”。


 
开启远程访问:
#
# 拷贝 rabbitmq 默认配置文件:
#: <syntaxhighlight lang="bash" highlight="">
#: <syntaxhighlight lang="bash" highlight="">
 
cp /usr/share/doc/rabbitmq-server-3.6.6/rabbitmq.config.example /etc/rabbit/rabbitmq.config
</syntaxhighlight>
</syntaxhighlight>
#
# 把 rabbitmq.config 文件里的 “{loopback_users, []}” 打开,重启服务即可:
#: <syntaxhighlight lang="bash" highlight="">
#: <syntaxhighlight lang="bash" highlight="">
vim /etc/rabbitmq/rabbitmq.config


...
...
{loopback_users, []}
...
...
</syntaxhighlight>
</syntaxhighlight>
#
# (重启服务器)
#: <syntaxhighlight lang="bash" highlight="">
: 如此,新添加的用户,直接就可以从远程访问。
 
 
如果想让指定用户只能本地访问,可以将其用户名添加到上面的列表。如只允许 admin 用户本机访问:
: <syntaxhighlight lang="bash" highlight="">
vim /etc/rabbitmq/rabbitmq.config


...
...
{loopback_users, ["admin"]}
...
...
</syntaxhighlight>
</syntaxhighlight>


== Docker方式部署 ==
== 用户管理 ==
可以到docker官方镜像仓库找最新版本:'''[https://hub.docker.com/_/rabbitmq https://hub.docker.com/_/rabbitmq]'''
guest 默认vhost为“/”,具有“/”上的全部权限。
 
用户管理相关命令:
: <syntaxhighlight lang="bash" highlight="">
# 添加用户
rabbitmqctl add_user username password
   
# 设置用户权限:默认vhost的所有权限(/ 表示默认vhost)
rabbitmqctl set_permissions -p / username ".*" ".*" ".*"
   
# 设置用户角色:管理员
rabbitmqctl set_user_tags username administrator
 
# 查看用户列表
rabbitmqctl list_users


=== 安装 ===
# 修改用户密码
<syntaxhighlight lang="bash" highlight="">
rabbitmqctl change_password username newpassword
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management
</syntaxhighlight>
其中:
* 下载并且启动了一个 rabbitmq 容器实例;
* 开放了两个端口:5672(代码访问使用)和 15672(管理后台使用);
* 使用的是 3-management 版本;


=== 容器维护 ===
# 删除用户
# 关闭 RabbitMQ 容器:
rabbitmqctl delete_user username
#: <syntaxhighlight lang="bash" highlight="">
docker stop rabbitmq
</syntaxhighlight>
# 启动 RabbitMQ 容器:
#: <syntaxhighlight lang="bash" highlight="">
docker start rabbitmq
</syntaxhighlight>
</syntaxhighlight>


== 管理后台 ==
=== 用户角色 ===
RabbitMQ提供了一个可视化的Web后台,方便了解队列的运行情况,也可以对RabbitMQ做一些管理操作。
大致可分为五类:
# '''超级管理员(administrator)''':可登陆管理控制台(启用 management plugin 的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
# '''监控者(monitoring)''':可登陆管理控制台(启用 management plugin 的情况下),同时可以查看 rabbitmq 节点的相关信息(进程数,内存使用情况,磁盘使用情况等)。
# '''策略制定者(policymaker)''':可登陆管理控制台(启用 management plugin 的情况下),同时可以对 policy 进行管理;但无法查看节点的相关信息。
# '''普通管理者(management)''':仅可登陆管理控制台(启用 management plugin 的情况下),无法看到节点信息,也无法对策略进行管理。
# '''其他''':无法登陆管理控制台,通常就是普通的'''生产者'''和'''消费者'''。


=== 用户权限 ===
指的是用户对 '''exchange''','''queue''' 的操作权限。包括:
# 配置权限:会影响到 exchange,queue 的声明和删除;
# 读写权限:影响到从 queue 里取消息,向 exchange 发送消息,以及 queue 和 exchange 的绑定(bind)操作。


访问 RabbitMQ 管理后台地址:[http://localhost:15672/ http://localhost:15672/]
: [[File:RabbitMQ:管理后台.png|600px]]
* 默认账号和密码:guest / guest


=== 后台首页 ===
相关命令:
: [[File:RabbitMQ:管理后台:后台首页.png|600px]]
: <syntaxhighlight lang="bash" highlight="">
# 设置用户权限
rabbitmqctl  set_permissions  -p  VHostPath  username  ConfP  WriteP  ReadP


=== 客户端连接情况 ===
# 查看(指定hostpath)所有用户的权限信息
: [[File:RabbitMQ:管理后台:客户端连接情况.png|600px]]
rabbitmqctl  list_permissions  [-p  VHostPath]


=== 交换机情况 ===
# 查看指定用户的权限信息
: [[File:RabbitMQ:管理后台:交换机情况.png|600px]]
rabbitmqctl  list_user_permissions  username


=== 队列情况 ===
# 清除用户的权限信息
: [[File:RabbitMQ:管理后台:队列情况.png|600px]]
rabbitmqctl  clear_permissions  [-p VHostPath] username
</syntaxhighlight>


=== 队列详情 ===
== 参考 ==
: [[File:RabbitMQ:管理后台:队列详情.png|600px]]
<references/>

2022年12月22日 (四) 09:45的最新版本


关于

RabbitMQ 快速搭建开发环境,因为 RabbitMQ 使用 Erlang 开发,常规方式安装需要先安装 Erlang,再安装 RabbitMQ 比较麻烦,所以这里推荐使用 Docker 方式部署,一条命令搞定。

Docker方式部署

可以到docker官方镜像仓库找最新版本:https://hub.docker.com/_/rabbitmq

安装

docker run -d --name rabbitmq -h rabbitmq -p 5672:5672 -p 15672:15672 -v /var/lib/rabbitmq:/var/lib/rabbitmq registry.docker-cn.com/library/rabbitmq:3.7
其中:
  1. -d”:后台运行容器;
  2. --name rabbitmq”:将容器的名字设为 rabbitmq;
  3. -h rabbitmq”:将容器的主机名设为 rabbitmq;
    • 希望 RabbitMQ 消息数据持久化保存到本地磁盘是需要设置主机名,因为 RabbitMQ 保存数据的目录为主机名。
  4. -p 5672:5672”:将容器的 5672 端口映射为本地主机的 5672 端口,这样可以通过本地的 5672 端口访问 rabbitmq;
  5. -p 15672:15672”:同上,容器端口映射到本地端口,15672 用于管理平台。
  6. -v /var/lib/rabbitmq:/var/lib/rabbitmq”:将容器的 /var/lib/rabbitmq 目录映射为本地主机的 /var/lib/rabbitmq 目录;
    • 这样可以将 RabbitMQ 消息数据持久化保存到本地磁盘,即使 RabbitMQ 容器被删除,数据依然还在。

管理

  1. 关闭 RabbitMQ 容器:
    docker stop rabbitmq
    
  2. 启动 RabbitMQ 容器:
    docker start rabbitmq
    

CentOS 安装[1]

两种方法可以在 RPM 发行版上安装 RabbitMQ 的最新版本:
1、在线安装:使用 Cloudsmith.ioPackageCloud 上的 Yum 存储库安装包。(强烈建议使用此选项)
2、离线安装:下载软件包并用 rpm 安装。(需要手动安装所有包依赖项)
  • RabbitMQ RPM 包需要 sudo 权限才能安装和管理。在 sudo 不可用的环境中,可以考虑使用通用二进制构建。

在线安装:使用 Cloudsmith 上的 YUM 库


Cloudsmith 提供了带有 RabbitMQ 包的 Yum 存储库,还可以通过 yum 安装最新的 Erlang 版本。

快速安装(脚本)

【这不是必须的,但是可以考虑使用,因为它将生成的脚本从公共互联网传输到特定的shell】

使用 Cloudsmith 提供的脚本

## Uses a Cloudsmith-provided Yum repository setup script.
## Always verify what is downloaded before piping it to a privileged shell!
curl -1sLf 'https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/setup.rpm.sh' | sudo -E bash

库文件安装

以下步骤展示了一种更传统的安装方式:【上述脚本可以替代以下内容】

安装步骤:

  1. Yum 将验证其安装的任何包的签名,因此该过程的第一步是导入签名密钥
    ## primary RabbitMQ signing key
    rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
    ## modern Erlang repository
    rpm --import 'https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key'
    ## RabbitMQ server repository
    rpm --import 'https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key'
    
  2. 为 RabbitMQ 和 Modern Erlang 添加 Yum 存储库
    • 【为了使用Yum存储库,必须在 /etc/Yum.repos.d/ 目录下添加一个 .repo 文件(例如“rabbitmq.repo”)】
    • 【.repo 文件根据发行版不同而略有差异,以 CentOS 7 为例】
    # In /etc/yum.repos.d/rabbitmq.repo
    
    [rabbitmq_erlang]
    name=rabbitmq_erlang
    baseurl=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/rpm/el/7/$basearch
    repo_gpgcheck=1
    enabled=1
    # Cloudsmith's repository key and RabbitMQ package signing key
    gpgkey=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key
           https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
    gpgcheck=1
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    pkg_gpgcheck=1
    autorefresh=1
    type=rpm-md
    
    [rabbitmq_erlang-noarch]
    name=rabbitmq_erlang-noarch
    baseurl=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/rpm/el/7/noarch
    repo_gpgcheck=1
    enabled=1
    # Cloudsmith's repository key and RabbitMQ package signing key
    gpgkey=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key
           https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
    gpgcheck=1
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    pkg_gpgcheck=1
    autorefresh=1
    type=rpm-md
    
    [rabbitmq_erlang-source]
    name=rabbitmq_erlang-source
    baseurl=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/rpm/el/7/SRPMS
    repo_gpgcheck=1
    enabled=1
    gpgkey=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key
    gpgcheck=0
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    pkg_gpgcheck=1
    autorefresh=1
    type=rpm-md
    
    
    ##
    ## RabbitMQ server
    ##
    
    [rabbitmq-server]
    name=rabbitmq_server
    baseurl=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/el/7/$basearch
    repo_gpgcheck=1
    enabled=1
    # Cloudsmith's repository key and RabbitMQ package signing key
    gpgkey=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key
           https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
    gpgcheck=1
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    pkg_gpgcheck=1
    autorefresh=1
    type=rpm-md
    
    [rabbitmq_server-noarch]
    name=rabbitmq_server-noarch
    baseurl=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/el/7/noarch
    repo_gpgcheck=1
    enabled=1
    # Cloudsmith's repository key and RabbitMQ package signing key
    gpgkey=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key
           https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
    gpgcheck=1
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    pkg_gpgcheck=1
    autorefresh=1
    type=rpm-md
    
    [rabbitmq_server-source]
    name=rabbitmq_server-source
    baseurl=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/el/7/SRPMS
    repo_gpgcheck=1
    enabled=1
    gpgkey=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key
    gpgcheck=0
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    pkg_gpgcheck=1
    autorefresh=1
    type=rpm-md
    
  3. 用 Yum 安装“Packages”
    • 【操作根据发行版不同而略有差异,以 CentOS 7 为例】
    1. 更新 Yum 软件包元数据:
      yum update -y
      
    2. 然后安装软件包:
      yum install socat logrotate -y
      
      yum install erlang rabbitmq-server -y
      
      • logrotate 程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用,可以节省磁盘空间。

在线安装:使用 PackageCloud 上的 YUM 库


PackageCloud 提供了包含 RabbitMQ 包的Yum存储库,也可以用于通过 yum 安装最新的 Erlang 版本。

快速安装(脚本)[2]

【这不是必须的,但是可以考虑使用,因为它将生成的脚本从公共互联网传输到特定的shell】

使用 PackageCloud 提供的脚本

## Uses a PackageCloud-provided Yum repository setup script.
## Always verify what is downloaded before piping it to a privileged shell!
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash

库文件安装

以下步骤展示了一种更传统的安装方式:【上述脚本可以替代以下内容】

安装步骤:

  1. Yum 将验证其安装的任何包的签名,因此该过程的第一步是导入签名密钥
    ## primary RabbitMQ signing key
    rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
    ## modern Erlang repository
    rpm --import https://packagecloud.io/rabbitmq/erlang/gpgkey
    ## RabbitMQ server repository
    rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
    
  2. 为 RabbitMQ 和 Modern Erlang 添加 Yum 存储库
    • 【为了使用Yum存储库,必须在 /etc/Yum.repos.d/ 目录下添加一个 .repo 文件(例如“rabbitmq.repo”)】
    • 【.repo 文件根据发行版不同而略有差异,以 CentOS 7 为例】
    # In /etc/yum.repos.d/rabbitmq.repo
    
    ##
    ## Zero dependency Erlang
    ##
    
    [rabbitmq_erlang]
    name=rabbitmq_erlang
    baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/$basearch
    repo_gpgcheck=1
    gpgcheck=1
    enabled=1
    # PackageCloud's repository key and RabbitMQ package signing key
    gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
           https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    
    [rabbitmq_erlang-source]
    name=rabbitmq_erlang-source
    baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/SRPMS
    repo_gpgcheck=1
    gpgcheck=0
    enabled=1
    gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    
    ##
    ## RabbitMQ server
    ##
    
    [rabbitmq_server]
    name=rabbitmq_server
    baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/$basearch
    repo_gpgcheck=1
    gpgcheck=1
    enabled=1
    # PackageCloud's repository key and RabbitMQ package signing key
    gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
           https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    
    [rabbitmq_server-source]
    name=rabbitmq_server-source
    baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/SRPMS
    repo_gpgcheck=1
    gpgcheck=0
    enabled=1
    gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    
  3. 用 Yum 安装“Packages”
    • 【操作根据发行版不同而略有差异,以 CentOS 7 为例】
    1. 更新 Yum 软件包元数据:
      yum update -y
      
    2. 然后安装软件包:
      ## install these dependencies from standard OS repositories
      yum install socat logrotate -y
      
      yum install --repo rabbitmq_erlang --repo rabbitmq_server erlang rabbitmq-server -y
      
      • logrotate 程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用,可以节省磁盘空间。

离线安装


离线安装的最大问题就是需要自行解决依赖项,以及选择兼容的版本。

注意:

  • RabbitMQ 依赖于 Erlang,而 Erlang 内存管理依赖 Socat,因此要首先安装 Erlang 与 socat;
  • Erlang 与 RabbitMQ 版本需要兼容,可以在“https://www.rabbitmq.com/which-erlang.html”查看。
  • 离线安装的包,可以自行下载然后上传到服务器,也可以通过服务器的 wget 工具直接下载:
    1. rabbitmq-server包下载地址:“https://github.com/rabbitmq/rabbitmq-server/releases
    2. erlang包下载地址:“https://github.com/rabbitmq/erlang-rpm/releases
    3. socat包下载地址:“https://pkgs.org/download/socat” 【socat 使用 yum 安装最新版本即可】
  • 对于基于RPM的发行版,现代 Erlang 提供了三种替代来源:(Erlang 在默认的 yum 存储库中不可用)
    1. RabbitMQ团队:只提供运行 RabbitMQ 所需的组件,官方称零依赖项,容易安装。【如果Erlang只是用来提供运行RabbitMQ的,推荐使用】
    2. Erlang官方:通常是相当最新的,并且涉及潜在的过多依赖关系列表的安装。【如果还需要Erlang做相关开发或运行环境,可选择使用】
    3. EPEL源:这些版本通常已经过时,不能用于运行最新的 RabbitMQ 版本。【不推荐】
      • P.S.:如果要使用 EPEL 存储库,需要通过 yum 安装先安装 EPEL 存储库:
        # 先安装epel存储库
        yum -y install epel-release
        
        # 再安装 Erlang、socat
        yum -y install erlang socat
        


【参照 Erlang 与 RabbitMQ 版本要求,以“erlang-23.3.1-1.el7.x86_64.rpm”与“rabbitmq-server-3.8.14-1.el7.noarch.rpm”为例】

步骤如下:

  1. 安装 Erlang:
    wget https://github.com/rabbitmq/erlang-rpm/releases/download/v23.3.1/erlang-23.3.1-1.el7.x86_64.rpm
    rpm -ivh erlang-23.3.1-1.el7.x86_64.rpm
    
    查看 Erlang 版本:
    erl -version
    
  2. 安装 Socat:
    wget http://mirror.centos.org/centos/7/os/x86_64/Packages/socat-1.7.3.2-2.el7.x86_64.rpm
    rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
    
    # 或者:
    yum install socat
    
  3. 安装 RabbitMQ:
    # 首先导入密钥
    rpm -import https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.14/rabbitmq-server-3.8.14-1.el7.noarch.rpm.asc
    
    # 下载、安装
    wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.14/rabbitmq-server-3.8.14-1.el7.noarch.rpm
    rpm -ivh rabbitmq-server-3.8.14-1.el7.noarch.rpm
    

升级

如果是 rabbitmq-server 的版本升级跨越稍微比较大,那么erlang版本就可能也需要升级。

【升级 rabbitmq-sever 服务前,先停止 rabbitmq 服务和升级 erlang 版本。】

相关命令:

rabbitmqctl stop

# 升级erlang版本
rpm -Uvh erlang-23.3.1-1.el7.x86_64.rpm

rpm -Uvh rabbitmq-server-3.8.14-1.el7.noarch.rpm
  • 安装服务的命令参数是 -i 即 install,而升级服务的命令参数为 -U 即 upgrade。

启动

参见:RabbitMQ:命令行、管理平台#启动命令

配置

查看日志

RabbitMQ 日志文件位于/var/log/rabbitmq目录下:

RabbitMQ:查看日志.png
  • RabbitMQ启动时,会在/etc/rabbitmq下寻找rabbitmq.config文件。
    可以自己创建这个文件,或下载 RabbitMQ 的配置文件模板然后按照需求更改;

启用管理平台插件

RabbitMQ 安装后默认是不启动管理模块的,所以需要配置将管理模块启动:

  1. 查看安装的插件:
    rabbitmq-plugins list
    
  2. 启用插件:
    rabbitmqctl start_app
    
    rabbitmq-plugins enable rabbitmq_management
    
    rabbitmqctl stop
    
    #重启rabbitmq
    systemctl restart rabbitmq
    

配置防火墙端口

防火墙允许远程访问端口:

firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --zone=public --add-port=5672/tcp --permanent
firewall-cmd --reload

开启用户远程访问

默认情况下,RabbitMQ 的默认的guest用户只允许本机访问。
    即:如果使用 guest 登录:http://xxxx.xxxx.xxxx.xxxx:15672 会提示“login failed”。

开启远程访问:

  1. 拷贝 rabbitmq 默认配置文件:
    cp /usr/share/doc/rabbitmq-server-3.6.6/rabbitmq.config.example /etc/rabbit/rabbitmq.config
    
  2. 把 rabbitmq.config 文件里的 “{loopback_users, []}” 打开,重启服务即可:
    vim /etc/rabbitmq/rabbitmq.config
    
    ...
    ...
    {loopback_users, []}
    ...
    ...
    
  3. (重启服务器)
如此,新添加的用户,直接就可以从远程访问。


如果想让指定用户只能本地访问,可以将其用户名添加到上面的列表。如只允许 admin 用户本机访问:

vim /etc/rabbitmq/rabbitmq.config

...
...
{loopback_users, ["admin"]}
...
...

用户管理

guest 默认vhost为“/”,具有“/”上的全部权限。

用户管理相关命令:

# 添加用户
rabbitmqctl add_user username password
    
# 设置用户权限:默认vhost的所有权限(/ 表示默认vhost)
rabbitmqctl set_permissions -p / username ".*" ".*" ".*"
    
# 设置用户角色:管理员
rabbitmqctl set_user_tags username administrator

# 查看用户列表
rabbitmqctl list_users

# 修改用户密码 
rabbitmqctl change_password username newpassword

# 删除用户
rabbitmqctl delete_user username

用户角色

大致可分为五类:

  1. 超级管理员(administrator):可登陆管理控制台(启用 management plugin 的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
  2. 监控者(monitoring):可登陆管理控制台(启用 management plugin 的情况下),同时可以查看 rabbitmq 节点的相关信息(进程数,内存使用情况,磁盘使用情况等)。
  3. 策略制定者(policymaker):可登陆管理控制台(启用 management plugin 的情况下),同时可以对 policy 进行管理;但无法查看节点的相关信息。
  4. 普通管理者(management):仅可登陆管理控制台(启用 management plugin 的情况下),无法看到节点信息,也无法对策略进行管理。
  5. 其他:无法登陆管理控制台,通常就是普通的生产者消费者

用户权限

指的是用户对 exchangequeue 的操作权限。包括:

  1. 配置权限:会影响到 exchange,queue 的声明和删除;
  2. 读写权限:影响到从 queue 里取消息,向 exchange 发送消息,以及 queue 和 exchange 的绑定(bind)操作。


相关命令:

# 设置用户权限
rabbitmqctl  set_permissions  -p  VHostPath  username  ConfP  WriteP  ReadP

# 查看(指定hostpath)所有用户的权限信息
rabbitmqctl  list_permissions  [-p  VHostPath]

# 查看指定用户的权限信息
rabbitmqctl  list_user_permissions  username

# 清除用户的权限信息
rabbitmqctl  clear_permissions  [-p VHostPath]  username

参考