当前位置: 首页 > news >正文

RabbitMQ的介绍与安装

目录

1 RabbitMQ介绍

1.1 什么是MQ

1.1.1 同步通信

1.1.2 异步通信

1.2 MQ的作用或应用场景

1.3 RabbitMQ简介

2 RabbitMQ安装

2.1 Erlang语言安装

2.2 RabbitMQ安装

2.3 RabbitMQ管理界面

2.4 启动RabbitMQ

2.5 访问RabbitMQ管理界面

2.5.1 添加管理员用户

2.5.2 给用户赋予权限

2.5.3 界面内容的基本使用

2.5 docker方式安装RabbitMQ

2.6 其它有关命令

2.6.1 常用命令

2.6.2 修改端口号(如果端口号冲突)

3 了解过哪些MQ,它们的区别是什么


1 RabbitMQ介绍

        RabbitMQ是Rabbit公司的一个MQ产品,其实现了AMQP的消息队列服务,常用于作为消息中间件。

        AMQP即Advanced Message Queuing Protocol(高级消息队列协议)是一个通用的应用层协议,提供统一消息服务的协议,面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,通信双方无论使用哪种语言设计,都不受影响。

1.1 什么是MQ

        MQ(Message Queue)全称消息队列,因为是队列,所以满足先进先出。只不过这个队列存储的内容是消息,消息可以简单,比如字符串、JSON等等;也可以复杂,比如内嵌对象。

        MQ常用于分布式系统节点之间的通信,通信方式分为两类:1.同步通信;2.异步通信。

1.1.1 同步通信

        同步通信是指通信双方直接互相调用对方的接口来进行通信。常见比如前后端分离模式,前端和后端通过直接调用接口来通信,即刻响应,不需要中间件。

1.1.2 异步通信

        异步通信是指通信双方发送数据后,首先经过中间件存储,达到一定条件再转发给另一方。

        这里的中间件可以是MQ,因此RabbitMQ采用的通信方式是异步通信。

1.2 MQ的作用或应用场景

        常见问法:项目中那些地方用到MQ,为什么需要用MQ?MQ有哪些应用场景?为什么MQ可以削峰?为什么MQ可以异步解耦?等等

        回答:先介绍MQ的作用,再讲具体的应用场景。

        MQ是一种可以接收消息并把消费转发出去的队列,作为消息中间件,它允许程序之间的远程通信以异步方式进行。常见应用场景如下:

        流量削峰:某些场景比如秒杀场景,流量某时刻会剧增,为了应付增加的请求,可以增加服务器节点,但是在流量较低的情况下,又会出现许多机器空闲造成资源浪费。MQ由于队列的先进先出特性可以自然的对消息排队,并按照消费者的负载能力进行消息的分发,从而使每个消费者都按照其最大负载能力处理消息请求。MQ的作用类似水坝,洪水来了(流量剧增),下游(消费者)承受不住洪水,水坝就阻拦,并根据下游水况动态地调整放水量。

        异步解耦:某些场景并不需要服务一直同步等待其它操作完成在进行后续流程。比如注册成功的消息通知,一旦注册成功,系统不需要等待注册成功的消息发送给用户邮箱或短信,可以直接开发系统让用户使用。而消息通知可以异步进行,把注册成功的消息放到MQ中,其它消息通知系统负责处理这些消息。

        消息分发:当多个服务都需要对系统做出响应,此时可以利用MQ广播能力(广播交换机)来把消息同时发送给多个服务。比如下订单成功后,订单系统把订单信息发送到MQ,由其它服务比如库存系统、支付系统、商家服务等多个服务来共同消费这样的消息。

        延迟通知:利用MQ中的延迟队列(TTL+死信队列、插件)实现延迟一定时间再通知或执行某些操作。比如订单超时后的取消订单,把订单放到延迟队列后,延迟一定时间后再由订单系统决定是否取消订单。

        异步通信:和异步解耦差不多,都是利用消息中间件的异步能力实现通信。异步通信更强调后续流程不一定能及时执行,而是在需要的时候再执行。因此可以把消息放到MQ,其提供异步处理机制(比如死信队列),从而实现需要执行时再执行的异步操作。

        除了上述作用,MQ还有其他许多作用,这里不一一介绍。

1.3 RabbitMQ简介

        RabbitMQ采用Erlang语言开发,几乎支持所有主流开发语言,社区活跃度高,拥有可视化的界面,性能较好,功能全面。吞吐量达到万级,适用于中小型公司且并发量没有那么高的场景。

2 RabbitMQ安装

        这里基于CentOS 7.9安装,在CentOS系统上安装需要确定Erlang版本和RabbitMQ版本的兼容性。可以使用cat /etc/redhat-release命令查看系统版本:

        Erlang环境下载地址:https://packagecloud.io/rabbitmq/erlang

        RabbitMQ下载地址:https://packagecloud.io/rabbitmq/rabbitmq-server

        Erlang与RabbitMQ版本对应表:https://www.rabbitmq.com/docs/which-erlang

2.1 Erlang语言安装

        确定Erlang、RabbitMQ和CentOS三者的对应关系后,首先需要下载Erlang,按照如下步骤在Linux系统中安装即可:

        安装完成后,输入erl来检查Erlang环境是否安装成功:

        输入halt().即可退出客户端。

2.2 RabbitMQ安装

        这里也是按照官网给出的步骤安装即可:

        注意:安装Erlang和RabbitMQ前都必须先进行step1,这是因为RabbitMQ和Erlang的官方版本通常不会直接包含在CentOS默认的软件源(yum)中。通过执行该命令,会将RabbitMQ官方维护的软件仓库添加到系统中,确保后续安装时能直接从官方获取最新稳定版或特定版本的软件包。同时还会自动导入GPG公钥防止安装包被篡改。

2.3 RabbitMQ管理界面

        默认的安装是不带管理界面的,我们可以手动启用插件来打开管理界面:

        命令:rabbitmq-plugins enable rabbitmq_management。

2.4 启动RabbitMQ

        命令:service rabbitmq-server start。

        作用:启动RabbitMQ服务。

        命令:service rabbitmq-server status。

        作用:查看RabbitMQ服务状态。

2.5 访问RabbitMQ管理界面

        在浏览器输入ip:端口号即可进入管理界面,管理界面的端口号默认都是15672:

2.5.1 添加管理员用户

        命令:rabbitmqctl add_user ${user} ${password}

2.5.2 给用户赋予权限

        命令:rabbitmqctl set_user_tags ${user} ${role}

        角色role有6种:Administrator(超级管理员,所有权限)、Monitoring(监控者,监控节点信息)、Policymaker(策略制定者,可以管理策略但是不能监控节点信息)、Management(普通管理者,不能监控节点和管理策略)、Impersonator(模拟者,无法登录管理控制台)、None(其他用户,普通的生产者和消费者)。

2.5.3 界面内容的基本使用

        按照添加的用户,就可以登录到管理界面了:

        在Admin界面,可以添加新用户和查看用户权限,也可以管理权限:

        点击右侧的Virtual Hosts可以进行虚拟机的管理,这里的虚拟机不同于传统的虚拟机(虚拟电脑),而是表示逻辑上的环境隔离,作用就和MySQL的databases一样,不同的database负责不同的业务。

2.5 docker方式安装RabbitMQ

        首先需要停止正在运行的RabbitMQ,否则就会端口号冲突,其余的操作按照如下命令即可:

service rabbitmq-server stop #停止RabbitMQ服务sudo systemctl start docker #启动dockerdocker search rabbitmq:management #查询镜像docker pull rabbitmq:management #拉取带管理界面版本的RabbitMQdocker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management #运行容器(-d后台方式,-p映射端口号(宿主机:容器内部))docker ps -a #查看正在运行的容器docker exec -it 容器ID /bin/bash #进入容器内部(添加用户、权限管理等都需要进入容器内部才能执行命令)

        使用docker方式启动的rabbitmq可以用(guest,guest)的用户名和密码来登录管理界面。

        后续学习使用CentOS安装的RabbitMQ,因此这里使用docker stop 容器id命令结束docker启动的RabbitMQ。

2.6 其它有关命令

2.6.1 常用命令

whereis rabbitmq #寻找安装路径sudo service rabbitmq-server restart #重启服务sudo service rabbitmq-server start #启动服务sudo systemctl stop rabbitmq-server #停止服务chkconfig rabbitmq-server on #添加开机启动服务yum -y remove rabbitmq-server.noarch #卸载rabbitmqrm -rf /var/lib/rabbitmq/ #删除rabbitmq相关文件rm -rf /usr/local/rabbitmq #删除rabbitmq相关文件yum -y remove erlang.x86_64 #卸载erlangrm -rf /usr/lib64/erlang/ #删除erlang相关文件rm -rf /usr/local/erlang #删除erlang相关文件

2.6.2 修改端口号(如果端口号冲突)

        可以cd到安装路径中的/etc/rabbitmq路径下,新建文件rabbitmq.conf,配置如下信息:

#修改client端口(默认为5672)listeners.tcp.default=5672#修改管理界面端口为(默认为15672)management.tcp.port=8943

        然后打开rabbitmq的默认文件路径/usr/lib/rabbitmq/lib/rabbitmq_server-3.8.30/sbin/rabbitmq-defaults,在文件末尾添加如下内容:

#添加配置路径到文件中,保存退出CONFIG_FILE=/etc/rabbitmq/rabbitmq.conf

        之后重启rabbitmq即可。

3 了解过哪些MQ,它们的区别是什么

        回答:回答常见的MQ产品的基本特性,把各自的优势、缺点和使用场景讲出来。

        (1)Kafka主要用于日志收集和传输,追求高吞吐量,性能卓越,单机吞吐达到十万级,功能较为简单,主要支持简单的MQ功能。适合大数据、实时计算和日志收集等场景

        (2)RabbitMQ采用Erlang语言开发,MQ功能比较全面,几乎支持所有主流语言,开源,提供的界面也很友好,性能较好,吞吐量能达到万级,社区活跃度较高,比较适合中小型公司、数据量没那么大,且并发量没那么太高的场景

        (3)RocketMQ采用Java语言开发,由阿里巴巴开源,后捐赠给了Apache。在可用性,可靠性以及稳定性等方面都非常出色,吞吐量能达到十万级,在Alibaba集团内部广泛使用,但支持的语言不多,产品较新文档较少,且社区活跃度一般。适合于大规模分布式系统、可靠性要求高、且并发大的场景,比如互联网金融。

下篇文章:

http://www.lryc.cn/news/587638.html

相关文章:

  • RabbitMQ的几个模式
  • Redis单线程详解
  • Advanced Database Systems: History of Databases
  • 代数基本定理最简短的证明
  • C++ 中常见的字符串定义方式及其用法
  • 正运动与您相聚2025青岛国际工业自动化技术及装备展览会!
  • 前端字体使用操作
  • YOLOv11调参指南
  • 管程! 解决互斥,同步问题的现代化手段(操作系统os)
  • Linux操作系统从入门到实战(八)详细讲解编译器gcc/g++编译步骤与动静态库链接
  • Rocket常见问题及解决方案
  • H2 与高斯数据库兼容性解决方案:虚拟表与类型处理
  • 第12章:【系统架构设计师】系统架构设计-数据流风格
  • Oracle中的INSTR函数
  • 衡石科技技术手册--仪表盘过滤控件详解
  • 空间智能-李飞飞团队工作总结(至2025.07)
  • Spring Cloud分布式配置中心:架构设计与技术实践
  • 2025前端面试题
  • (懒人救星版)CNN_Kriging_NSGA2_Topsis(多模型融合典范)深度学习+SCI热点模型+多目标+熵权法 全网首例,完全原创,早用早发SCI
  • 【前端:Typst】--let关键字的用法
  • ethers.js-5–和solidity的关系
  • Popover API 实战指南:前端弹层体验的原生重构
  • 七、深度学习——RNN
  • C语言-流程控制
  • 详解从零开始实现循环神经网络(RNN)
  • 使用 keytool 在服务器上导入证书操作指南(SSL 证书验证错误处理)
  • kafka的部署
  • Android系统的问题分析笔记 - Android上的调试方式 bugreport
  • 论文阅读:WildGS-SLAM:Monocular Gaussian Splatting SLAM in Dynamic Environments
  • 深入浅出Kafka Consumer源码解析:设计哲学与实现艺术