RabbitMQ是一款开源的消息代理和队列服务器,它允许应用程序通过常见的消息队列协议来交换数据。它在全球范围内被小型创业公司和大型企业广泛使用,是最广泛部署的开源消息代理。它支持多种消息队列协议,但最常用的是基于AMQP(高级消息队列协议)的协议。RabbitMQ广泛应用于大规模分布式系统,它可以用来解耦系统组件,以及在组件之间进行可靠的消息传递。
官网地址:https://www.rabbitmq.com/
RabbitMQ具有高度灵活的路由功能,稳定的可靠性和集群功能,以及对多种协议的支持,这使得它能够应对各种复杂的应用场景。例如,它可以用于处理高峰流量,通过缓冲消息来保护系统免受过载。同时,它也被广泛应用在微服务架构中,作为服务间的通信工具,提供可靠、灵活的消息交换能力。
RabbitMQ对硬件的要求取决于实际的消息负载。对于较小的部署,只需要一个具有适量RAM(例如1GB或更多)的服务器。对于更大的部署,您可能需要更多的RAM和更多的CPU资源。请注意,RabbitMQ是内存和磁盘驱动的,所以对这两项资源的需求将取决于消息的数量和大小。
在安装RabbitMQ之前,您需要在系统中安装Erlang运行环境,因为RabbitMQ是用Erlang语言编写的。可以从Erlang官方网站下载适合操作系统的版本。
在开始安装之前,建议检查以下系统信息:确认操作系统版本(本教程将使用CentOS Stream 9),因为最新版本的RabbitMQ需要再openssl1.1以上版本下运行,如果不基于新的系统就需要升级openssl。所以安装前需要检查openssl版本
[root@localhost ~]# openssl version
OpenSSL 3.0.7 1 Nov 2022 (Library: OpenSSL 3.0.7 1 Nov 2022)
访问托管在github上的地址:https://github.com/rabbitmq/rabbitmq-server/releases,选择下载rabbitmq-server-3.12.0-1.el8.noarch.rpm
,大约16.7 M,该安装包不需要依赖其他的类库.
因为我们要安装的版本是3.12.0,在该本的github兼容说明中有下面这句话
This release requires Erlang 25.0 or later.
所以我们下载的Erlang版本不能低于25.0版本,访问RabbitMQ开发团队给我们提供的一个Erlang综合包:https://github.com/rabbitmq/erlang-rpm/releases,因为我的系统是centos stream 9,所以我们选择下载erlang-25.3.2.1-1.el9.x86_64.rpm,大约20.3 M。
在Erlang安装包所在的目录下执行rpm的安装命令:
rpm -ivh erlang-25.3.2.1-1.el9.x86_64.rpm
安装成功后
[root@localhost home]# rpm -ivh erlang-25.3.2.1-1.el9.x86_64.rpm
警告:erlang-25.3.2.1-1.el9.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID cc4bbe5b: NOKEY
Verifying... ################################# [100%]
准备中... ################################# [100%]
正在升级/安装...
1:erlang-25.3.2.1-1.el9 ################################# [100%]
[root@localhost home]#
查询版本
[root@localhost home]# erl -version
Erlang (SMP,ASYNC_THREADS) (BEAM) emulator version 13.2.2.1
[root@localhost home]#
在RabbitMQ安装包所在的目录下执行rpm的安装命令:
rpm -ivh rabbitmq-server-3.12.0-1.el8.noarch.rpm
安装成功后
[root@localhost home]# rpm -ivh rabbitmq-server-3.12.0-1.el8.noarch.rpm
警告:rabbitmq-server-3.12.0-1.el8.noarch.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID 6026dfca: NOKEY
Verifying... ################################# [100%]
准备中... ################################# [100%]
正在升级/安装...
1:rabbitmq-server-3.12.0-1.el8 ################################# [100%]
/usr/lib/tmpfiles.d/rabbitmq-server.conf:1: Line references path below legacy directory /var/run/, updating /var/run/rabbitmq → /run/rabbitmq; please update the tmpfiles.d/ drop-in file accordingly.
[root@localhost home]#
查看rabbitmqctl管理工具的安装位置
[root@localhost ~]# whereis rabbitmqctl
rabbitmqctl: /usr/sbin/rabbitmqctl /usr/share/man/man8/rabbitmqctl.8.gz
使用rpm自带依赖安装包安装完成后,RabbitMQ已经配置在系统中,我们可以可以通过service
或systemctl
管理RabbitMQ服务
service和systemctl都是用于管理系统服务的命令行工具
- service命令通常在传统的SysV init系统(如CentOS 6及其之前的版本)中使用,
命令语法service
start - systemctl命令是在采用systemd初始化系统的Linux发行版(如CentOS 7及其之后的版本)中使用,
命令语法systemctl start
在CentOS 7及更高版本中,service命令仍然可用,但实际上它是通过systemctl进行调用的。我更加推荐使用systemctl.
常用的命令
systemctl enable rabbitmq-server
systemctl start rabbitmq-server
systemctl status rabbitmq-server
systemctl restart rabbitmq-server
rabbitmqctl start_app
是RabbitMQ自带的命令行启动工具,systemctl start rabbitmq-server
是通过系统级别的服务管理工具启动RabbitMQ服务。一般情况下,使用systemctl start rabbitmq-server更常见,因为它会确保RabbitMQ以服务的形式在系统启动时自动运行,并受系统级别的管理和监控。
类似的还有关闭命令rabbitmqctl stop_app
下面是执行的过程,如果没有加入开机启动时,在查询状态时会显示disabled;加入开机启动会显示enabled;当启动服务后,Active会显示active (running)
,此时我们的RabbitMQ服务就已经启动了。
[root@localhost ~]# systemctl status rabbitmq-server
○ rabbitmq-server.service - RabbitMQ broker
Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; disabled; preset: disabled)
Active: inactive (dead)
[root@localhost ~]# systemctl enable rabbitmq-server
Created symlink /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service → /usr/lib/systemd/system/rabbitmq-server.service.
[root@localhost ~]# systemctl status rabbitmq-server
○ rabbitmq-server.service - RabbitMQ broker
Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; enabled; preset: disabled)
Active: inactive (dead)
[root@localhost ~]# systemctl start rabbitmq-server
[root@localhost ~]# systemctl status rabbitmq-server
● rabbitmq-server.service - RabbitMQ broker
Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; enabled; preset: disabled)
Active: active (running) since Mon 2023-06-05 22:36:20 CST; 2s ago
Main PID: 4504 (beam.smp)
Tasks: 25 (limit: 10921)
Memory: 143.2M
CPU: 4.201s
CGroup: /system.slice/rabbitmq-server.service
├─4504 /usr/lib64/erlang/erts-13.2.2.1/bin/beam.smp -W w -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -pc unicode -P 1048576 -t 5000>
├─4517 erl_child_setup 32768
├─4542 /usr/lib64/erlang/erts-13.2.2.1/bin/epmd -daemon
├─4563 /usr/lib64/erlang/erts-13.2.2.1/bin/inet_gethost 4
├─4564 /usr/lib64/erlang/erts-13.2.2.1/bin/inet_gethost 4
└─4567 /bin/sh -s rabbit_disk_monitor
6月 05 22:36:18 localhost.localdomain rabbitmq-server[4504]: Release series support status: supported
6月 05 22:36:18 localhost.localdomain rabbitmq-server[4504]: Doc guides: https://rabbitmq.com/documentation.html
6月 05 22:36:18 localhost.localdomain rabbitmq-server[4504]: Support: https://rabbitmq.com/contact.html
6月 05 22:36:18 localhost.localdomain rabbitmq-server[4504]: Tutorials: https://rabbitmq.com/getstarted.html
6月 05 22:36:18 localhost.localdomain rabbitmq-server[4504]: Monitoring: https://rabbitmq.com/monitoring.html
6月 05 22:36:18 localhost.localdomain rabbitmq-server[4504]: Logs: /var/log/rabbitmq/[email protected]
6月 05 22:36:18 localhost.localdomain rabbitmq-server[4504]: <stdout>
6月 05 22:36:18 localhost.localdomain rabbitmq-server[4504]: Config file(s): (none)
6月 05 22:36:20 localhost.localdomain rabbitmq-server[4504]: Starting broker... completed with 0 plugins.
6月 05 22:36:20 localhost.localdomain systemd[1]: Started RabbitMQ broker.
RabbitMQ安装完成后,还为我们提供了一些管理工具,可以执行一些操作和诊断,这些工具存在 **/usr/sbin/**目录下:
#列出所有RabbitMQ用户
rabbitmqctl list_users
#创建一个新用户tom,并设置密码为abc123
rabbitmqctl add_user tom abc123
#为用户设置权限
#-p表示我们要设置权限的目标虚拟主机,/表示默认的虚拟主机
#tom是要设置权限的目标用户
#第一个".*"表示该用户在虚拟主机上对所有资源(exchange, queue等)都有配置(configure)权限
#第二个".*"表示该用户对所有资源都有写入(write)权限,
#第三个".*"表示该用户对所有资源都有读取(read)权限。
rabbitmqctl set_permissions -p / tom ".*" ".*" ".*"
#修改RabbitMQ用户的密码
#这种方法会立即更改密码,而不会提示确认新密码或输入旧密码。因此,请确保已正确键入新密码,并记住或安全地存储该密码。
rabbitmqctl change_password <user> <newpassword>
#输出RabbitMQ的状态
rabbitmq-diagnostics status
#检查RabbitMQ是否正常运行
rabbitmq-diagnostics ping
#列出所有可用的插件
rabbitmq-plugins list
#开启某个插件
rabbitmq-plugins enable < plugin-name >
rabbitmq-queues:这个工具用于管理和监视RabbitMQ中的队列。例如,可以使用它来列出所有的队列,查看队列的消息数量,查看队列的消费者数量等。
rabbitmq-server:这是RabbitMQ服务器本身,运行这个命令可以启动RabbitMQ服务器,但还是建议使用上面3.4 启动RabbitMQ服务的管理方式来启动。
rabbitmq-streams:这个工具是用于管理RabbitMQ的流功能的。RabbitMQ的流功能提供了一种类似于Apache Kafka的消息队列模型,可以处理大量的数据流。
rabbitmq-upgrade:这个工具用于升级RabbitMQ服务器和其插件。当RabbitMQ有新版本发布时,可以使用这个工具来进行升级操作,以获得新的特性和修复的问题。
在下面会使用这些工具来完成一些配置。
开启web管理页面:rabbitmq-plugins enable rabbitmq_management
[root@localhost ~]# rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node rabbit@localhost:
rabbitmq_management
The following plugins have been configured:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
Applying plugin configuration to rabbit@localhost...
The following plugins have been enabled:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
started 3 plugins.
注意:通过systemctl status firewalld
查看防火墙是否开启,如果开启可以选择关闭或者添加rabbitmq需要的端口
#本次停止,但是下次开机还会启动
systemctl stop firewalld
#关闭开机启动
systemctl disable firewalld
#添加5672端口
firewall-cmd --zone=public --add-port=5672/tcp --permanent
#添加15672端口
firewall-cmd --zone=public --add-port=15672/tcp --permanent
#重载生效
firewall-cmd --reload
RabbitMQ的管理后台是可以通过浏览器访问,浏览器地址输入 http://192.168.3.11:15672就可以看到管理后台的登陆页面(192.168.3.11是我的ip,请更改成rabbitmq所在服务器的ip)
查看服务内置的用户
[root@localhost ~]# rabbitmqctl list_users
Listing users ...
user tags
guest [administrator]
这里的guest/guest可以用于登陆,但是只允许本地登陆,所以远程访问还需要创建新的用户tom/abc123
[root@localhost ~]# rabbitmqctl add_user tom abc123
Adding user "tom" ...
Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more.
[root@localhost ~]# rabbitmqctl set_permissions -p / tom ".*" ".*" ".*"
Setting permissions for user "tom" in vhost "/" ...
[root@localhost ~]# rabbitmqctl set_user_tags tom administrator
Setting tags for user "tom" to [administrator] ...
[root@localhost ~]# rabbitmqctl list_users
Listing users ...
user tags
tom [administrator]
guest [administrator]
命令的解释查看前面3.5 RabbitMQ提供的管理工具中的说明
登陆后的RabbitMQ管理后台页面
本文提供了一份RabbitMQ的安装指南,详解的介绍了在CentOS Stream 9环境中部署和使用RabbitMQ的所有关键步骤。从RabbitMQ的基本概念和应用场景开始,然后详细阐述了安装RabbitMQ的准备工作,包括硬件要求、软件依赖以及系统配置检查。然后详细介绍了在CentOS环境下安装和配置RabbitMQ的过程,以及RabbitMQ提供的各种管理工具的使用方法。最后,我们详细解释了如何开启并登陆到RabbitMQ的管理后台,关于管理后台的各种操作,后面会有新的文章介绍。