前言:在分布式系统架构中,消息队列作为数据流转的 “高速公路”,是微服务架构不可或缺的核心组件。RabbitMQ 凭借其稳定的性能、灵活的路由机制和强大的生态支持,成为企业级消息中间件的首选之一。不过,当我们聚焦 CentOS 7 系统时,会发现它的生态适配存在特殊之处 —— 由于系统内核与依赖限制,CentOS 7 最高仅能稳定运行 RabbitMQ 3.9.16 版本,而更高版本的 RabbitMQ(如 4.x)则更适合 CentOS 8/Stream 或 Ubuntu 等较新系统。
本文将围绕 CentOS 7 环境,详细拆解 RabbitMQ 3.9.16 的完整部署流程:从 Erlang 环境准备、GPG 密钥验证等基础操作,到配置文件优化、Web 管理界面搭建等核心环节,再到虚拟主机(Virtual Host)的原理与实战应用。无论你是初次接触消息队列的开发新手,还是需要在 legacy 系统中落地生产环境的运维工程师,都能通过这套流程完成 RabbitMQ 的稳定部署,并掌握虚拟主机这一关键的资源隔离机制。让我们一步步构建一个安全、高效的消息通信中枢!

RabbitMQ下载链接地址

RabbitMQ 安装包下载链接:
https://github.com/rabbitmq/rabbitmq-server/releases/
RabbitMQ依赖erlang安装包下载链接:
https://github.com/rabbitmq/erlang-rpm/releases
RabbitMQ版本 和 Erlang 版本兼容性关系:
https://www.rabbitmq.com/which-erlang.html

📌 系统版本适配说明
  • CentOS 7:因系统内核和依赖限制,最高适配 RabbitMQ 3.9.16,更高版本因 官方未维护 版本不兼容会导致启动失败。
  • CentOS 8/StreamUbuntu:仍在持续维护,可安装 RabbitMQ 4.x 及更高版本(需参考对应系统教程)。
    在这里插入图片描述
  • 或者在ubuntu系统上直接查可用版本的包
  • 命令apt search rabbitmq-server
    在这里插入图片描述

一、环境准备与依赖安装

1. 导入 GPG 密钥(确保包来源可信,可选步骤)
步骤 1:传入密钥
# 导入 RabbitMQ 官方签名密钥
rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
rpm --import https://packagecloud.io/rabbitmq/erlang/gpgkey
rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
# 若网络受限,可手动在windows电脑上一一打开以上链接,下载密钥文件后导入centos系统上

在这里插入图片描述

步骤 2:手动导入所有密钥
# 导入 Erlang 仓库密钥
rpm --import rabbitmq-erlang-F032D9A6696558DA.pub.gpg  # 导入 RabbitMQ Server 仓库密钥
rpm --import rabbitmq-rabbitmq-server-F6609E60DC62814E.pub.gpg  # 导入全局发布签名密钥
rpm --import rabbitmq-release-signing-key.asc  
步骤 3:验证密钥导入
rpm -q gpg-pubkey --qf '%{NAME}-%{VERSION}-%{RELEASE} --> %{SUMMARY}\n' | grep rabbitmq  

预期输出(示例):

gpg-pubkey-F032D9A6 --> RabbitMQ Erlang Repository Key  
gpg-pubkey-F6609E60 --> RabbitMQ Server Repository Key  
gpg-pubkey-<...>    --> RabbitMQ Release Signing Key  
2. 安装 Erlang 环境(RabbitMQ 依赖)
# 执行 RPM 包安装(需提前下载 erlang-23.3.2-1.el7.x86_64.rpm)
rpm -ivh erlang-23.3.2-1.el7.x86_64.rpm
# 验证安装
erl -version  # 应显示 Erlang/OTP 11.2.1

在这里插入图片描述

二、安装与启动 RabbitMQ

1. 安装 RabbitMQ Server
# 执行 RPM 包安装(需提前下载 rabbitmq-server-3.9.16-1.el7.noarch.rpm)
rpm -ivh rabbitmq-server-3.9.16-1.el7.noarch.rpm

在这里插入图片描述

2. 启动服务与状态检查
# 启动服务
systemctl start rabbitmq-server
# 查看服务状态
systemctl status rabbitmq-server
# 或者
rabbitmqctl status
# 或使用 RabbitMQ 诊断工具
rabbitmq-diagnostics status

在这里插入图片描述
注意:这里为空,说明安装启动后默认不会使用配置文件

3. 查看日志(启动失败时排查)
tail -200f /var/log/rabbitmq/rabbit@localhost.log

在这里插入图片描述

  • home dir:rabbitmq安装后的主目录,
  • config file(s):表示当前没有配置文件,显示为 (none)
  • database dir:数据目录

三、核心配置文件优化

1. 创建配置文件(生产环境必备)
vim /etc/rabbitmq/rabbitmq.conf

填入以下内容:

### ================ 基础网络配置 ================
# RabbitMQ 核心 AMQP 协议监听配置
listeners.tcp.default = 0.0.0.0:5672### ================ 管理插件配置 ================
# 管理插件 Web 界面、HTTP API 监听端口,启用管理插件后可通过浏览器访问(需先执行 rabbitmq-plugins enable rabbitmq_management)
management.listener.port = 15672
# 关闭管理插件的 HTTPS 监听(生产环境若需加密可设为 true 并配置证书)
management.listener.ssl = false### ================ 资源限制配置 ================
# 内存使用阈值,当 RabbitMQ 占用内存达到系统内存 40% 时,触发流控等机制,避免内存耗尽
vm_memory_high_watermark.relative = 0.4
# 磁盘空闲空间低于 100MB 时,阻塞消息写入,防止磁盘写满影响服务
disk_free_limit.absolute = 100MB### ================ 用户安全配置 ================
# 禁用默认的 guest 用户(默认只能本地登录,生产环境为安全建议关闭)
loopback_users.guest = false
2. 配置文件权限设置
chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.conf
chmod 640 /etc/rabbitmq/rabbitmq.conf
3. 重启服务使配置生效
systemctl restart rabbitmq-server

在这里插入图片描述
启动成功

再次执行: rabbitmq-diagnostics status 查看新增的配置文件是否被使用
在这里插入图片描述

四、服务管理与开机自启

1. 常用服务命令
systemctl start rabbitmq-server  # 启动  
systemctl stop rabbitmq-server   # 停止  
systemctl restart rabbitmq-server  # 重启  
systemctl enable rabbitmq-server  # 开机自启  
2. 验证开机自启配置
systemctl is-enabled rabbitmq-server  # 输出 "enabled" 表示配置成功

五、Web 管理界面配置

1. 启用管理插件
rabbitmq-plugins enable rabbitmq_management
2. 创建管理员用户(安全加固)
# 添加用户(替换用户名和密码)
rabbitmqctl add_user <用户名> <密码>
# 设置全权限(默认虚拟主机 / 下)
rabbitmqctl set_permissions -p / <用户名> ".*" ".*" ".*"
# 注解:
# 第一个 ".*" 表示用户可以配置任意队列和交换机(configure 权限)
# 第二个 ".*" 表示用户可以向任意队列和交换机发送消息(write 权限)
# 第三个 ".*" 表示用户可以从任意队列中消费消息(read 权限)
# -p / 表示在默认虚拟主机 "/" 上设置权限# 标记为管理员角色
rabbitmqctl set_user_tags <用户名> administrator
3. 修改密码(避免后台命令行明文泄露)
  • 登录 Web 管理界面(http://服务器IP:15672),进入 AdminUsers → 点击 admin 用户。
  • Password 区域输入<新密码> ,点击 Update user 保存。
    在这里插入图片描述
    在这里插入图片描述
4. 删除默认 guest 用户

在这里插入图片描述

rabbitmq.conf配置文件里禁止了guest用户,但是web页面上面还能登录,这里选择删除默认用户,永久禁用
命令:

rabbitmqctl delete_user guest

在这里插入图片描述

六、虚拟主机(Virtual Host)详解与创建

1. 虚拟主机的核心作用

虚拟主机是 RabbitMQ 中资源隔离的逻辑容器,类比为“独立的数据空间”,主要功能包括:

  • 多租户隔离:为不同业务线、团队或客户分配独立虚拟主机,避免数据混杂(如 SaaS 系统中隔离不同企业的数据)。
  • 环境隔离:区分开发、测试、生产环境,防止测试数据污染正式环境。
  • 权限精细化管理:为不同虚拟主机分配不同用户权限(如只读、读写、管理等),提升系统安全性。
2. 创建虚拟主机(Web 界面操作)
  1. 登录 Web 管理界面,进入 AdminVirtual Hosts → 点击 Add a new virtual host
  2. 输入虚拟主机名称(如 biz-system),点击 Add virtual host 完成创建。
    在这里插入图片描述
3. 绑定用户到虚拟主机
  1. 进入 Users → 点击目标用户(如 admin)。
  2. Virtual Hosts 区域,选择已创建的虚拟主机(如 biz-system),点击 Set permission 即可赋予该用户在虚拟主机内的操作权限。
    在这里插入图片描述

七、验证与生产级建议

  • 磁盘监控:确保 /var/lib/rabbitmq/ 目录有足够空间,避免因磁盘满导致服务阻塞。
  • 内存监控:通过 top 或监控工具查看 RabbitMQ 进程内存使用,避免超过配置的 0.4 阈值。
  • 网络防火墙:配置防火墙允许 5672(AMQP)和 15672(Web 管理)端口的访问,限制非信任IP。

📝 总结

CentOS 7 下安装 RabbitMQ 3.9.16 需注意版本兼容性,通过配置文件和权限管理可构建安全的消息队列服务。虚拟主机作为核心隔离机制,能有效支撑多业务场景的部署需求。后续若需升级系统,建议迁移至 CentOS 8/Stream 或 Ubuntu,以获取更高版本 RabbitMQ 的新特性支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/89616.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89616.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/89616.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python爬虫用途和介绍

目录 什么是Python爬虫 Python爬虫用途 Python爬虫可以获得那些数据 Python爬虫的用途 反爬是什么 常见的反爬措施 Python爬虫技术模块总结 获取网站的原始响应数据 获取到响应数据对响应数据进行过滤 对收集好的数据进行存储 抵御反爬机制 Python爬虫框架 Python…

uni-app开发app保持登录状态

在 uni-app 中实现用户登录一次后在 token 过期前一直免登录的功能&#xff0c;可以通过以下几个关键步骤实现&#xff1a;本地持久化存储 Token、使用请求与响应拦截器自动处理 Token 刷新、以及在 App.vue 中结合 pages.json 设置登录状态跳转逻辑。 ✅ 一、pages.json 配置说…

21、MQ常见问题梳理

目录 ⼀ 、MQ如何保证消息不丢失 1 、哪些环节可能会丢消息 2 、⽣产者发送消息如何保证不丢失 2.1、⽣产者发送消息确认机制 2.2、Rocket MQ的事务消息机制 2.3 、Broker写⼊数据如何保证不丢失 2.3.1** ⾸先需要理解操作系统是如何把消息写⼊到磁盘的**。 2.3.2然后来…

MySQL数据库--SQL DDL语句

SQL--DDL语句 1&#xff0c;DDL-数据库操作2&#xff0c;DDL-表操作-查询3&#xff0c;DDL-表操作-创建4&#xff0c;DDL-表操作-数据类型4.1&#xff0c;DDL-表操作-数值类型4.2&#xff0c;DDL-表操作-字符串类型4.3&#xff0c;DDL-表操作-日期时间类型4.4&#xff0c;实例 …

Spring Cloud 服务追踪实战:使用 Zipkin 构建分布式链路追踪

Spring Cloud 服务追踪实战&#xff1a;使用 Zipkin 构建分布式链路追踪 在分布式微服务架构中&#xff0c;一个用户请求往往需要经过多个服务协作完成&#xff0c;如果出现性能瓶颈或异常&#xff0c;排查会非常困难。此时&#xff0c;分布式链路追踪&#xff08;Distributed…

Linux云计算基础篇(6)

一、IO重定向和管道 stdin&#xff1a;standard input 标准输入 stdout&#xff1a;standard output 标准输出 stderr&#xff1a; standard error 标准错误输出 举例 find /etc/ -name passwd > find.out 将正确的输出重定向在这个find.ou…

Python将COCO格式分割标签绘制到对应的图片上

Python将COCO格式分割标签绘制到对应的图片上 前言前提条件相关介绍COCO 格式简介&#xff08;实例分割&#xff09;&#x1f4c1; 主要目录结构&#xff1a;&#x1f4c4; JSON 标注文件结构示例&#xff1a;✅ 特点&#xff1a; 实验环境Python将COCO格式分割标签绘制到对应的…

光纤(FC)交换机与以太网(网络)交换机的区别

光纤通道交换机&#xff08;FC交换机&#xff09;与普通以太网交换机&#xff08;网络交换机&#xff09;在用途、协议、性能、可靠性等方面存在显著差异&#xff0c;主要区别如下&#xff1a; 1. 用途与网络类型 FC交换机 主要用于存储区域网络&#xff08;SAN&#xff09;&a…

电磁场有限元方法EX2.2-里兹法求解泊松方程控制的边值问题

电磁场有限元方法EX2.2-里兹法求解泊松方程控制的边值问题 简单学习一下有限元法的基础理论&#xff0c;书本为电磁场有限元经典教材&#xff1a; THE FINITE ELEMENT METHOD IN ELECTROMAGNETICS, JIAN-MING JIN 目录 电磁场有限元方法EX2.2-里兹法求解泊松方程控制的边值问…

云端备份与恢复策略:企业如何选择最安全的备份解决方案

更多云服务器知识&#xff0c;尽在hostol.com 想象一下&#xff0c;某个凌晨&#xff0c;你突然发现公司所有重要数据都被加密&#xff0c;系统崩溃&#xff0c;业务停摆。有人给你打来电话说&#xff1a;“一切都被勒索了&#xff0c;恢复费用可能需要几百万。”这时&#xf…

OSPF高级特性之FRR

一、概述 众所周知,IGP当中链路状态路由协议(OSPF、ISIS)之所以可以代替我们的矢量路由协议(RIP),就是因为链路状态路由协议可以根据某些特性快速的感知到路由的变化从而改变路径。 前面我们已经介绍过了OSPF的其中一个快速收敛的机制,SPF算法,本章节将介绍另一个快速收敛机制,…

多元化国产主板,满足更高性能、更高安全的金融发展

在金融行业数字化转型的浪潮中&#xff0c;对于核心硬件的性能与安全需求达到了前所未有的高度。国产主板应运而生&#xff0c;凭借其卓越的多元化特性&#xff0c;为金融领域带来了高性能运算与高安全防护的双重保障&#xff0c;成为推动金融行业发展的关键力量。以高能计算机…

数据库分布式架构:ShardingSphere 实践

一、数据库分布式架构概述 1.1 分布式架构概念 在当今数字化时代&#xff0c;随着业务的不断拓展和数据量的爆炸式增长&#xff0c;传统的单机数据库架构逐渐暴露出诸多局限性。例如&#xff0c;在电商大促期间&#xff0c;海量的订单数据和用户访问请求会让单机数据库不堪重…

【WRFDA教程第二期】运行WRFDA 3DVAR/4DVAR数据同化

目录 一、准备阶段&#xff1a;下载并解压测试数据二、运行 3DVAR 教学实验日志分析&#xff08;wrfda.log&#xff09;进阶实验建议&#xff1a;对比不同设置的影响输出文件说明 三、运行 4DVAR 教学实验步骤1&#xff1a;准备工作目录与环境变量步骤2&#xff1a;链接可执行文…

redis缓存三大问题分析与解决方案

什么是缓存&#xff1f; 缓存&#xff08;Cache&#xff09;是一种将热点数据缓存在内存中&#xff08;如 Redis&#xff09;以加快访问速度、减轻数据库压力的技术。 但引入缓存后可能出现 三大核心问题&#xff1a; 缓存穿透&#xff08;Cache Penetration&#xff09;缓存…

李宏毅机器学习笔记——梯度下降法

深度学习介绍 基于仿生学的一种自成体系的机器学习算法&#xff0c;包括但不限于图像识别、语音、文本领域。 梯度下降法 作为深度学习算法种常用的优化算法 梯度下降法&#xff0c;是一种基于搜索的最优化方法&#xff0c;最用是最小化一个损失函数。梯度下降是迭代法的一…

day50/60

浙大疏锦行 DAY 50 预训练模型CBAM模块 知识点回顾&#xff1a; resnet结构解析CBAM放置位置的思考针对预训练模型的训练策略 差异化学习率三阶段微调 ps&#xff1a;今日的代码训练时长较长&#xff0c;3080ti大概需要40min的训练时长 作业&#xff1a; 好好理解下resnet18的…

Vue3 之vite.config.js配置

一、示例 import { defineConfig } from vite import vue from vitejs/plugin-vue import path from path // https://vitejs.dev/config/ export default defineConfig({plugins: [vue()],base: ./,build: {assetsDir: static, //指定静态资源目录rollupOptions: {input: {mai…

利用Gpu训练

方法一&#xff1a; 分别对网络模型&#xff0c;数据&#xff08;输入&#xff0c;标注&#xff09;&#xff0c;损失函数调用.cuda() 网络模型&#xff1a; if torch.cuda.is_available():netnet.cuda() 数据&#xff08;训练和测试&#xff09;&#xff1a; if torch.cud…

使用excel中的MATCH函数进行匹配数据

一、背景 在平日处理数据时&#xff0c;经常需要将给定数据按照制定的数据进行排序&#xff0c;数量比较大时&#xff0c;逐个处理有点费事费力且容易出错&#xff0c;这时可借助excel表格中match函数进行精确匹配。 二、使用match函数–精确排序操作步骤 主要工作步骤&#xf…