千家信息网

RabbitMQ运维篇之部署与用户管理(一)

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,一、认识RabbitMQ及用途Message Queue(MQ)相对于一些大点的公司都会使用这个MQ,比如像kafka,rabbitmq,activeMQ,rocketMQ主要用于系统与系统之间,或者
千家信息网最后更新 2026年11月01日RabbitMQ运维篇之部署与用户管理(一)

一、认识RabbitMQ及用途
Message Queue(MQ)
相对于一些大点的公司都会使用这个MQ,比如像kafka,rabbitmq,activeMQ,rocketMQ主要用于系统与系统之间,或者程序与程序之间进行数据的传递,那么作为消息中间件,我们可以将它作为消息代理服务器,最主要的就是作用就是系统之间的信息进行"结藕",MQ是数据可靠性的重要保障。

那么说起mq的作用之前呢,比如我们以前会遇到什么问题?

1)比如说现在我们有两个系统,一个系统A,一个系统B,那么这两个系统可以把它理解成一个订单系统,一个是后台的支付系统,那么这两个系统之间,你调用我的,我调用你的,也就是数据之间进行一个相互的传递。 那么按照之前的做法来说,来回的传递,就出现问题了,比如说,不管是a系统还是b系统中间任何一个系统出现了问题,我们的消息就发送不出去了,那么像碰到这种情况下,我们就需要额外的去编写一些程序,来保证我们的消息成功送达,比如说增加缓存,增加重试次数,这就需要额外的编码,这就需要编码的工作量也是不小的。

2)另外就是数据传递过程中,这两个系统都是java开发的还好,比如一个是java开发的一个是python开发的,那么在这两个系统之间进行数据传递的过程中,那么麻烦就很大了,在这里面平台不一样语言不一样,进行传递的接口也不一样,这在我们无形中带来了很大的问题。

3)对于系统a与系统b之间如果系统出现了问题,我们甚至都不知道是什么原因造成的,比如系统a接口变了,导致系统b接收不到哪些,系统b不知道出现哪些问题,我们没办法对问题进行切全,那么在线上调试与运维的过程中,这也是一个必然灾难性的后果。

综上所述的话,直接调用的话称为藕严重的耦合,这两个缺了哪一个都不能正常工作,那么怎么解决呢,这个时候就需要mq去解决了。

所以mq叫做消息代理服务器,可以看到上面的mq的基本架构图系统a与系统b不再直接通信,中间增加了一台MQ的消息代理服务器,所有的消息都往这个消息代理服务器上去发送,那么这个消息代理服务器本身来说它具备了一些高可用,高并发的特性,可以估且的认为它是非常稳定的,至少比我们开发的系统来说要稳定的多的多,不用担心当机,无法提供服务,那么在这个基础之上,所有的系统把这个消息放出去,再由这个消息服务器,根据数据的情况分别的转发或者分发

那么我们数据传递的目的,那么这么做有这么一个好处
首先我们系统之间不再进行之间的通信,那么它就完成这个节藕的工作,它完全面向一个中间人来做
其二的话MQ它是一个国际的标准,它在底层遵循一个叫做amqp高级消息队列协议,那么在这个底层的话因为它是一个国际标准,因此系统a与系统b,我们不管是什么样的系统开发的,只要遵循了数据传输的规范,那么就可以在这里面完成通过mq进行数据的传递,这是数据统一的协议,另外就是数据切全的过程,那么在切全的过程中,你会发现,我们估且认为mq这是一个稳定的服务。系统a与系统b进行数据传输,如果系统a把数据,送到mq里面,那么系统a的任务就完成了,至于系统b把我们的数据拿走,那是系统b的事,那么系统a的事完成了,那么如果真的出现了问题,比如运维工程师发现这个程序没有执行,那么看着系统a发送成功了,那么剩下的问题就是连带mq,到系统b这一块进行一个处理与跟踪,那么mq并提供强大的图形化管理页面,我们可以轻易的将之前发送的数据进行跟踪与管理。这也是非常的重要

那么说到mq,它有这么一个好的特性,可以总结一句话,mq解决了在这个系统之间进行数据传递的耦合性问题,使用mq几乎适用于我们所有的系统调用或者是分布式项目

二、什么是RabbitMQ?
在我们市场上有各种各样的mq,但是rabbitmq是全世界最火的开源消息代理服务器,在全世界拥有超过35000个项目部署在rabbitmq,用的人多,而且解决一些相关的问题也就很快,这个rabbit英文翻译为兔子,这个也是一个整个消息中间件的龙头老大,也就是我们使用rabbitmq很多的方案不用自己去考虑,因为全世界的工程师都为这个rabbitmq添砖加瓦,那么这个rabbitmq的最新版本的是3.8.2
而且rabbitmq支持几乎所有的操作系统与编程语言,提供了高并发,高可用的成熟方案,支持多种消息协议,易于部署与使用
官方地址:https://www.rabbitmq.com/


Rabbitmq与其他MQ的对比
像activemq和kafka都是apache的子成员,而rocketmq是阿里巴巴推行的消息中间件,也是作为一个apache的子项目
从这张表看出这个rabbitmq是用的最多的这个毋庸置疑,一般使用中遇到的问题,在它们的论坛以及百度中都可以找到相关的解决方案,另外就是kafka由于大数据的应用也比较多,应用比较多,逐渐的也已经替代了activemq,像rocketmq一般应用的都在国内一般比较多,另外都支持这些数据保存到磁盘上,并发吞吐量就是每秒可以处理多少数据,在不同的设计与不同的背景当中,它的结果也是完全不同的,这里最高的是kafka,因为是大数据的领域,也是因为高性能引起了很多大数据工程师的注意,并发量在rocketmq中也是极高的,因为像双十一这么大的并发量rocket扛住了,它在底层的优化也是做的很好的,在并发吞吐量rabbitmq就稍微逊色一些,rabbitmq在数据可靠性的问题上做了很大的努力,它保证在这里数据是非常可靠的,也是极高的,另外就是生态完整度,在周边做了一些相关的,比如UI或者路由分发等,用户总量也是rabbitmq最多,其次就是kafka,应用场景,由于极高的数据可靠性,rabbitmq主要用于高可靠的交易系统当中,activemq用于一些比较传统的消息传递当中,kafka一般使用最多也是使用日志处理大数据应用这一块,而rocketmq一般主要用于阿里巴巴内部比较多一点,像双十一就是使用的rocketmq,主要适用于互联网高并发,高可用这一块,但是这一块,在阿里也开源了很多的比如dubbo,当时也停止更新了,然后恢复的,像这一块我们社区的完整性和开源是极其不利的,像阿里有款分布式数据库叫OceanBase,由淘宝核心系统研发部、运维、DBA、广告、应用研发等部门共同完成。也是对mysql数据库底层进行了二次开发,但是用着用着就闭源了,所以担心阿里会闭源rabbitmq,在国内的开源软件来说,现在能做的很好的不是特别多,对于rocketmq未来是闭源商用还是继续开源,那么现在还是属于一个观望的态度,现在目前看到rocketmq在apache的star是5000多星,只能说是中规中矩。

RabbitMQ的应用场景
异构系统的数据传递:什么叫异构系统,就是现在有两个系统彼此要传递数据,一个用java一个用c开发的,一¥个在天津一个在北京,像这种不在一个地区又是不同语言开发的系统叫做异构系统,像这种异构系统利用mq进行数据的传递是不错的选择,但是遇到海量的数据,但是不建议使用mq进行去传递,一般mq擅长传递小规模的数据。

高并发程序的流量控制:比如像阿里的双十一进行秒杀的时候或者进行系统最忙碌的时候,进行流量控制的时候,削峰,平谷,像这种应用用mq做肯定没问题,mq是采用对列的机制,那么只允许同一时间有多少人进去,那么在这里是使用mq进行控制的。

基于p2p,p2ppp的程序:mq本身支持定阅和发布的模式或者是进行点对点消费的模式,比如使用mq进行点对点的开发,比如像自己写的qq,像微信,点对点通信,我们可以使用mq进行分发,另外就是p2ppp的程序的话,也非常适合就像我们程序底层的时候,大家看过爱奇艺什么的,那么比如喜欢一个人的频道,直接点一下关注,那么到这个人节目有更新的时候,马上订阅的人都能收到它的最新的消息,这就是通过mq的订阅与发布,这些都是mq的天生所在。

分布式系统的事务一致性TCC:分布式事务是我们开发过程中最挠头的问题,比如说什么是分布式事务,现在有5个系统,这5个系统的话要完成大的业务,那么这个大的业务,这5个系统每一个系统都完成了一小块数据,现在有需求来了,这5个系统要么全部都处理成功,要么中间有任何一个出现问题,我要把之前的系统信息全部都回滚什么都没做过,那么这就是我们的说到的分布式事务,那么分布式事务底层的话我们的设计叫tcc,那么在这里面最核心的就是基于mq进行消息的分发,来通知我们的应用,它进行提交回滚。

高可靠的交易系统:在高可靠的交易系统中,rabbitmq最值得骄傲的是高可靠性,对于应用来说mq本身就是高可靠性,同时对数据也进行了高可靠的支持,几乎不会出现数据mq的层面上丢失的情况,那么在这种高可靠的交易系统来说,rabbitmq最适合不过了,任何一个多数据进行交互的两个以上三个以上项目,进行数据传递用mq作为系统节藕的服务器是再合适不过的。

三、Linux平台安装最新RabbitMQ
RabbitMQ使用Erlang开发
Erlang(['ə:læŋ])是一种通用的面向并发的编程语言, Erlang是一个结构化,动态类型编程语言,内建并行计算支持。
使用Erlang来编写分布式应用要简单的多,Erlang运行时环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。
下载地址:https://www.rabbitmq.com/download.html
直接下载最新的rabbitmq到本地

rabbitmq还需要依赖erlang的运行环境
https://www.erlang-solutions.com/resources/download.html
选择centos,找到22.2.5最新的版本下载到本地

[root@zhaocheng ~]# mkdir rabbitmq
[root@zhaocheng rabbitmq]# ls
esl-erlang_22.2.5-2~centos~7_amd64.rpm rabbitmq-server-3.8.2-1.el7.noarch.rpm
--nodeps不检查依赖,去除依赖关系
[root@zhaocheng rabbitmq]# rpm -ivh --nodeps esl-erlang_22.2.5-2~centos~7_amd64.rpm
[root@zhaocheng rabbitmq]# rpm -ivh --nodeps rabbitmq-server-3.8.2-1.el7.noarch.rpm
[root@zhaocheng rabbitmq]# rabbitmq-plugins enable rabbitmq_management
启动控制台
[root@zhaocheng rabbitmq]# rabbitmq-server
访问http://ip:15672

登录的时候3.3以上的版本都会出现User can only log in via localhost,是因为禁止使用guest/guest权限通过除localhost外的访问
找到这个文件rabbit.app
vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.7/ebin/rabbit.app

将:{loopback_users, [<<"guest">>]},
改为:{loopback_users, []},

重启服务
[root@zhaocheng ~]# rabbitmqctl stop
[root@zhaocheng ~]# rabbitmq-server
登录:guest
密码:guest

RabbitMQ常用命令
启动与关闭
rabbitmq-server 前台启动
rabbitmq-server -detached 后台启动
rabbitmqctl stop 停止服务/kill -9 rbbitmq的pid

终止与启动应用
rabbitmqctl start_app 启动应用
rabbitmqctl stop_app 终止应用
就是将我们的应用进行启动或者终止,这个不会对我们的进程产生影响,只是对我们的队列服务进行了暂停,比如像一个电厂将这个电厂看作一个进程,比如电厂进行升级改造,需要拉闸,那么相当于使用这个rabbitmqctl stop_app,恢复的话,使用start_app

用户管理
创建一个用户,比如叫kubernetes
格式:rabbitmqctl add_user {username} {password}
[root@zhaocheng ~]# rabbitmqctl add_user kubernetes 123456
Adding user "kubernetes" ...

删除用户
rabbitmqctl delete_user {username}

重置密码,一般的话在部署rabbitmq的时候进行对guest用户进行修改密码,因为这个权限是非常大的
[root@zhaocheng ~]# rabbitmqctl change_password guest 123456789
Changing password for user "guest" ...
格式:rabbitmqctl change_password {username} {newpassword}

授予用户角色(Tag),在rabbitmq中有四种基本的角色,对mq有不同的操作权限,这4种角色统一叫tag,可以针对我们创建的用户给它一定的权限,这个tag也就是包含了一定相关的策略信息。
格式:rabbitmqctl set_user_tags {username} {tag}
[root@zhaocheng ~]# rabbitmqctl set_user_tags kubernetes administrator
Setting tags for user "kubernetes" to [administrator] ...
查看对我们的kubernetes用户设置了权限为超级管理员

设置用户允许访问的vhost:访问的虚拟主机,相当于对应mysql中对应的数据库,mysql可以把数据放在不同对应的数据中,对数据进行分类,那么vhost也是一样,可以对不同的系统进行设置不同的虚拟主机,通过set_permissions规定哪个用户,可以访问哪些虚拟主机,后面的星是能够执行所有的权限,第一个是配置权限,读权限,写权限,-p是虚拟主机的路径
格式:rabbitmqctl set_permissions -p / user_admin '.' '.' '.'
给kubernetes用户一个默认的虚拟主机的操作权限,一般生产环境中会创建多个虚拟主机,进行一些相关的权限
[root@zhaocheng ~]# rabbitmqctl set_permissions -p / kubernetes '.
' '.' '.'
Setting permissions for user "kubernetes" in vhost "/" ...
可以使用页面上直接添加用户


rabbitmq用户四种tag
超级管理员(administrator):也就是进行对所有的用户进行管理
可登陆管理控制台(启用management plugin的情况下),可查看所有 的信息,并且可以对用户,策略(policy)进行操作。

监控者(monitoring):可以查看rabbitmq节点的相关信息,是管理我们运行节点的运行状态的
登陆管理控制台(启用management plugin的情况下),同时可以查看
rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)

策略制定者(policymaker):这个就无法查看我们节点的相关信息,但是可以进行一些策略的定制,比如在管理集群的时候,哪些队列可以进行复制,或者运行的规则,规定了我们的节点是怎么运行的
可登陆管理控制台(启用management plugin的情况下), 同时可以对
policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。

普通管理者(management)
仅可登陆管理控制台(启用management plugin的情况下),无法看到 节点信息,也无法对策略进行管理。

还有一个就是什么都没写的时候,没有角色,连控制台都无法登录

系统 数据 消息 就是 问题 用户 管理 应用 服务 权限 开发 时候 之间 信息 情况 控制 不同 两个 分布式 服务器 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 什么是科技互联网 湖北九亚互联网络科技有限公司 华服互联网科技靠谱吗 互联网最新的科技 今日互联网科技 互联网科技深圳 互联网科技集团 新浪科技互联网 佰商互联网科技有限公司 上海电发互联网科技有限公司 千方科技属于互联网企业吗 青岛科技大学互联网大赛研究生 互联网行业科技股 玉溪新华互联网科技好不好 中和天地互联网科技有限公司 无锡工业互联网科技有限公司 美国互联网科技实力 中国新注册互联网科技 互联网科技职业技能培训学校 美国五大互联网科技公司市值多少 深圳互联网络科技有限公司 奇酷互联网科技公司 互联网科技类展会 成都铂石互联网科技做什么的 洛阳昕诺飞互联网科技有限公司 如何创新互联网科技 领航科技大厦互联网公司 珠海东科互联网科技有限公司 互联网科技手抄报图片 山东蛋芒互联网科技有限公司
0