1 基础知识
1.1 RabbitMQ的简介
– RabbitMQ拥有成千上万的用户,是最受欢迎的开源消息代理之一
– RabbitMQ在全球范围内小型初创企业和大型企业都有使用
1.2 RabbitMQ的特点
– RabbitMQ轻巧、易于在内部和云中部署
– RabbitMQ支持多种消息传递协议
– RabbitMQ可以部署在分布式和联合配置中,以满足大规模、高性能的需求
1.3 RabbitMQ支持的协议
– AMQP 0-9-1和扩展(最初支持的协议),二进制协议,可定义强大的消息传递语义,客户端容易实现
– STOMP,基于文本消息传递协议通过插件才能支持,强调协议简单性,几乎无消息传递语义定义
– MQTT,二进制协议,强调轻量级发布、订阅消息传递,目标是受限设备客户端,支持MQTT 3.1
– AMQP 1.0,与旧版分属不同协议,线路级别不共享内容、新版对语义要求少故易容于代理,客户端实用少
– HTTP和Web Sockets,HTTP不属于真正的消息传递协议,RabbitMQ通过三种方式进行HTTP消息传输,
— STOMP插件支持STOMP传递WebSockets消息到浏览器
— MQTT插件支持WebSockets支持MQTT传递消息到浏览器
— 管理插件支持简单HTTP API方式发送和接收消息(用于诊断目的)
1.3 RabbitMQ的开发语言
– Java
– .NET
– PHP
– Python
– JavaScript
– Ruby
– Go
– 其他语言
1.4 RabbitMQ的端口
– 4369,epmd守护进程或RabbitMQ节点和CLI工具使用的对等发现服务的端口
– 567[1-2],非TLS或TLS的AMQP 0-9-1和1.0客户端的服务端口
– 25672,用于节点间和CLI工具通讯(Erlang分发服务器端口)并从动态范围分配(不建议公开)
– 356[72-82],由CLI工具(Erlang分发客户端端口)用于与节点进行通讯
– 15672,HTTP API客户端端口,管理UI和Rabbitmqadmin
– 6161[3-4],非TLS或TLS的STOMP客户端端口
– [1,8]883,非TLS或TLS的MQTT客户端端口
– 15674,STOMP-over-WebSockets客户端端口
– 15675,MQTT-over-WebSockets客户端端口
– 15692,Prometheus端口
2 最佳实践
2.1 安装前的准备
2.1.1 系统信息
OS = Oracle Linux 9.x x86_64
IP Address = 10.168.0.27
Host Name = rabbitmq.cmdschool.org
2.1.2 配置安装源
vim /etc/yum.repos.d/rabbitmq.repo
加入如下配置,
# In /etc/yum.repos.d/rabbitmq.repo
##
## Zero dependency Erlang RPM
##
[modern-erlang]
name=modern-erlang-el9
# Use a set of mirrors maintained by the RabbitMQ core team.
# The mirrors have significantly higher bandwidth quotas.
baseurl=https://yum1.rabbitmq.com/erlang/el/9/$basearch
https://yum2.rabbitmq.com/erlang/el/9/$basearch
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md
[modern-erlang-noarch]
name=modern-erlang-el9-noarch
# Use a set of mirrors maintained by the RabbitMQ core team.
# The mirrors have significantly higher bandwidth quotas.
baseurl=https://yum1.rabbitmq.com/erlang/el/9/noarch
https://yum2.rabbitmq.com/erlang/el/9/noarch
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key
https://github.com/rabbitmq/signing-keys/releases/download/3.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
##
[rabbitmq-el9]
name=rabbitmq-el9
baseurl=https://yum2.rabbitmq.com/rabbitmq/el/9/$basearch
https://yum1.rabbitmq.com/rabbitmq/el/9/$basearch
repo_gpgcheck=1
enabled=1
# Cloudsmith's repository key and RabbitMQ package signing key
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
https://github.com/rabbitmq/signing-keys/releases/download/3.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-el9-noarch]
name=rabbitmq-el9-noarch
baseurl=https://yum2.rabbitmq.com/rabbitmq/el/9/noarch
https://yum1.rabbitmq.com/rabbitmq/el/9/noarch
repo_gpgcheck=1
enabled=1
# Cloudsmith's repository key and RabbitMQ package signing key
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
https://github.com/rabbitmq/signing-keys/releases/download/3.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
2.2 安装 RabbitMQ
2.1.1 安装软件包
yum install -y rabbitmq-server
如果遇到如下错误,
Error: Error downloading packages: Interrupted by a SIGINT signal
你可能需要执行如下命令,
rpm --import https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key rpm --import https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
2.1.2 启动服务并设置服务默认启动
systemctl start rabbitmq-server systemctl enable rabbitmq-server
然后,我们使用如下命令确认服务的状态,
systemctl status rabbitmq-server
另外,也可以使用如下命令查看服务倾听的端口,
ss -antp | egrep "epmd|beam" | grep LISTEN
可见如下信息,
LISTEN 0 4096 0.0.0.0:4369 0.0.0.0:* users:(("epmd",pid=13074,fd=3))
LISTEN 0 128 0.0.0.0:25672 0.0.0.0:* users:(("beam.smp",pid=13034,fd=19))
LISTEN 0 4096 [::]:4369 [::]:* users:(("epmd",pid=13074,fd=4))
LISTEN 0 128 *:5672 *:* users:(("beam.smp",pid=13034,fd=34))
2.1.3 开启所需的服务端口
firewall-cmd --permanent --add-port 4369/tcp firewall-cmd --permanent --add-port 5672/tcp firewall-cmd --reload firewall-cmd --list-all
2.2 启用管理插件服务
2.2.1 启用管理插件
rabbitmq-plugins enable rabbitmq_management
可见如下输出,
Enabling plugins on node rabbit@onlyoffice01: rabbitmq_management The following plugins have been configured: rabbitmq_management rabbitmq_management_agent rabbitmq_web_dispatch Applying plugin configuration to rabbit@onlyoffice01... The following plugins have been enabled: rabbitmq_management rabbitmq_management_agent rabbitmq_web_dispatch started 3 plugins.
然后,可以使用如下命令确认启动的插件,
rabbitmq-plugins list
可见如下输出,
Listing plugins with pattern ".*" ... Configured: E = explicitly enabled; e = implicitly enabled | Status: * = running on rabbit@onlyoffice01 |/ [ ] rabbitmq_amqp1_0 4.3.5 [ ] rabbitmq_auth_backend_cache 4.3.5 [ ] rabbitmq_auth_backend_http 4.3.5 [ ] rabbitmq_auth_backend_internal_loopback 4.3.5 [ ] rabbitmq_auth_backend_ldap 4.3.5 [ ] rabbitmq_auth_backend_oauth2 4.3.5 [ ] rabbitmq_auth_mechanism_ssl 4.3.5 [ ] rabbitmq_consistent_hash_exchange 4.3.5 [ ] rabbitmq_event_exchange 4.3.5 [ ] rabbitmq_exchange_federation 4.3.5 [ ] rabbitmq_federation 4.3.5 [ ] rabbitmq_federation_common 4.3.5 [ ] rabbitmq_federation_management 4.3.5 [ ] rabbitmq_federation_prometheus 4.3.5 [ ] rabbitmq_jms_topic_exchange 4.3.5 [E*] rabbitmq_management 4.3.5 [e*] rabbitmq_management_agent 4.3.5 [ ] rabbitmq_mqtt 4.3.5 [ ] rabbitmq_peer_discovery_aws 4.3.5 [ ] rabbitmq_peer_discovery_common 4.3.5 [ ] rabbitmq_peer_discovery_consul 4.3.5 [ ] rabbitmq_peer_discovery_etcd 4.3.5 [ ] rabbitmq_peer_discovery_k8s 4.3.5 [ ] rabbitmq_prometheus 4.3.5 [ ] rabbitmq_queue_federation 4.3.5 [ ] rabbitmq_random_exchange 4.3.5 [ ] rabbitmq_recent_history_exchange 4.3.5 [ ] rabbitmq_sharding 4.3.5 [ ] rabbitmq_shovel 4.3.5 [ ] rabbitmq_shovel_management 4.3.5 [ ] rabbitmq_shovel_prometheus 4.3.5 [ ] rabbitmq_stomp 4.3.5 [ ] rabbitmq_stream 4.3.5 [ ] rabbitmq_stream_management 4.3.5 [ ] rabbitmq_top 4.3.5 [ ] rabbitmq_tracing 4.3.5 [ ] rabbitmq_trust_store 4.3.5 [e*] rabbitmq_web_dispatch 4.3.5 [ ] rabbitmq_web_mqtt 4.3.5 [ ] rabbitmq_web_mqtt_examples 4.3.5 [ ] rabbitmq_web_stomp 4.3.5 [ ] rabbitmq_web_stomp_examples 4.3.5
以上设置完成后,你可能需要使用如下命令重启服务使配置生效,
systemctl restart rabbitmq-server
然后,你需要使用如下命令确认服务端口已经倾听,
ss -antp | egrep "epmd|beam" | grep LISTEN
可见如下信息,
LISTEN 0 4096 0.0.0.0:4369 0.0.0.0:* users:(("epmd",pid=18772,fd=3))
LISTEN 0 128 0.0.0.0:25672 0.0.0.0:* users:(("beam.smp",pid=18732,fd=19))
LISTEN 0 1024 0.0.0.0:15672 0.0.0.0:* users:(("beam.smp",pid=18732,fd=34))
LISTEN 0 4096 [::]:4369 [::]:* users:(("epmd",pid=18772,fd=4))
LISTEN 0 128 *:5672 *:* users:(("beam.smp",pid=18732,fd=35))
2.2.2 设置管理员账号和密码
rabbitmqctl add_user admin adminpwd rabbitmqctl set_user_tags admin administrator
2.2.3 开启所需的服务端口
firewall-cmd --permanent --add-port 15672/tcp firewall-cmd --reload firewall-cmd --list-all
2.1.6 浏览器测试
In Windows Client,
notepad \Windows\System32\drivers\etc\hosts
加入如下配置,
10.168.0.27 rabbitmq.cmdschool.org
以上名称解析仅适用于测试环境,生产环境请使用DNS配置,然后使用浏览器访问如下地址,
http://rabbitmq.cmdschool.org:15672/
可见如下显示,

User: admin
Password: adminpwd
2.3 性能优化
2.3.1 查询服务状态
rabbitmqctl status
可见如下显示,
Status of node rabbit@onlyoffice01 ... Runtime OS PID: 18732 OS: Linux Uptime (seconds): 224 Is under maintenance?: false RabbitMQ version: 4.3.5 RabbitMQ release series support status: see https://www.rabbitmq.com/release-information Node name: rabbit@onlyoffice01 Erlang configuration: Erlang/OTP 27 [erts-15.2.7.12] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [jit:ns] Crypto library: OpenSSL 3.5.5 27 Jan 2026 Erlang processes: 434 used, 1048576 limit Scheduler run queue: 1 Cluster heartbeat timeout (net_ticktime): 60 #... Interface: [::], port: 15672, protocol: http, purpose: HTTP API Interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication Interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
“[…]”表示省略,并注意到PID是“18732”,于是可以使用如下命令查看开启文件数限制,
cat /proc/18732/limits
可见如下显示,
Limit Soft Limit Hard Limit Units [...] Max open files 32768 32768 files [...]
2.3.2 修改最大文件数限制
mkdir /etc/systemd/system/rabbitmq-server.service.d/ vim /etc/systemd/system/rabbitmq-server.service.d/limits.conf
加入如下配置,
[Service] LimitNOFILE=64000
配置修改完毕后,需要使用如下命令重载服务使服务配置生效,
systemctl daemon-reload
然后,需要使用如下命令重启服务使配置生效,
systemctl restart rabbitmq-server
参阅文档
============
官方首页
————
https://www.rabbitmq.com/
官方github首页
————
https://github.com/rabbitmq/rabbitmq-server
文档首页
—————
https://www.rabbitmq.com/docs
下载和安装教程
———–
https://www.rabbitmq.com/docs/install-rpm
https://www.rabbitmq.com/docs/download
github下载
———–
https://github.com/rabbitmq/rabbitmq-server/releases
没有评论