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集团内部广泛使用,但支持的语言不多,产品较新文档较少,且社区活跃度一般。适合于大规模分布式系统、可靠性要求高、且并发大的场景,比如互联网金融。
下篇文章: