当前位置: 首页 > 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.dtcms.com/a/278542.html

相关文章:

  • 嵌入式小记
  • 亚马逊自养号技术栈解析:从环境隔离到AI行为模拟的实战指南
  • C++编程语言:标准库:内存和资源管理(Bjarne Stroustrup)
  • 对偶原理与蕴含定理
  • UART寄存器介绍
  • 解决安装 make 时 “configure: error: C compiler cannot create executables” 报错
  • 用于监测线性基础设施的分布式声学传感:现状与趋势
  • week3
  • 阿里云ODPS多模态数据处理实战:MaxFrame的分布式AI数据管道构建
  • ISO 15765-2TP传输协议
  • 迁移学习之图像预训练理解
  • 【双链表】【数组】
  • ubuntu(22.04)系统上安装 MuJoCo
  • 计算机网络(基础概念)
  • 网络协议和基础通信原理
  • qt-- 编译工具-Cmake的使用
  • 一文读懂循环神经网络(RNN)—语言模型+读取长序列数据(2)
  • Python----NLP自然语言处理(NLP自然语言处理解释,NLP的发展历程)
  • QT——文件操作类 QFile和QTextStream
  • 【同等学力-计算机-真题解析】离散数学-图论(握手定理、欧拉公式)
  • ARMv8.1原子操作指令(ll_sc/lse)
  • #Paper Reading# Apple Intelligence Foundation Language Models
  • 【Linux网络】:HTTP(应用层协议)
  • 深入解析 Transformer:开启自然语言处理新时代的革命性模型
  • uni-app在安卓设备上获取 (WIFI 【和】以太网) ip 和 MAC
  • 游戏框架笔记
  • SAP ERP与微软ERP dynamics对比,两款云ERP产品有什么区别?
  • [个人笔记] WSL 完整使用指南及 Claude Code 配置记录
  • 019_工具集成与外部API调用
  • 【HarmonyOS】元服务概念详解