RabbitMQ的介绍与安装

目录

[1 RabbitMQ介绍](#1 RabbitMQ介绍)

[1.1 什么是MQ](#1.1 什么是MQ)

[1.1.1 同步通信](#1.1.1 同步通信)

[1.1.2 异步通信](#1.1.2 异步通信)

[1.2 MQ的作用或应用场景](#1.2 MQ的作用或应用场景)

[1.3 RabbitMQ简介](#1.3 RabbitMQ简介)

[2 RabbitMQ安装](#2 RabbitMQ安装)

[2.1 Erlang语言安装](#2.1 Erlang语言安装)

[2.2 RabbitMQ安装](#2.2 RabbitMQ安装)

[2.3 RabbitMQ管理界面](#2.3 RabbitMQ管理界面)

[2.4 启动RabbitMQ](#2.4 启动RabbitMQ)

[2.5 访问RabbitMQ管理界面](#2.5 访问RabbitMQ管理界面)

[2.5.1 添加管理员用户](#2.5.1 添加管理员用户)

[2.5.2 给用户赋予权限](#2.5.2 给用户赋予权限)

[2.5.3 界面内容的基本使用](#2.5.3 界面内容的基本使用)

[2.5 docker方式安装RabbitMQ](#2.5 docker方式安装RabbitMQ)

[2.6 其它有关命令](#2.6 其它有关命令)

[2.6.1 常用命令](#2.6.1 常用命令)

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

[3 了解过哪些MQ,它们的区别是什么](#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,否则就会端口号冲突,其余的操作按照如下命令即可:

bash 复制代码
service rabbitmq-server stop #停止RabbitMQ服务

sudo systemctl start docker #启动docker

docker search rabbitmq:management #查询镜像

docker pull rabbitmq:management #拉取带管理界面版本的RabbitMQ

docker 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 常用命令

bash 复制代码
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 #卸载rabbitmq

rm -rf /var/lib/rabbitmq/ #删除rabbitmq相关文件

rm -rf /usr/local/rabbitmq #删除rabbitmq相关文件

yum -y remove erlang.x86_64 #卸载erlang

rm -rf /usr/lib64/erlang/ #删除erlang相关文件

rm -rf /usr/local/erlang #删除erlang相关文件

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

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

bash 复制代码
#修改client端口(默认为5672)

listeners.tcp.default=5672

#修改管理界面端口为(默认为15672)

management.tcp.port=8943

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

bash 复制代码
#添加配置路径到文件中,保存退出

CONFIG_FILE=/etc/rabbitmq/rabbitmq.conf

之后重启rabbitmq即可。

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

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

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

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

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

下篇文章:

RabbitMQ工作流程https://blog.csdn.net/sniper_fandc/article/details/149310780?fromshare=blogdetail&sharetype=blogdetail&sharerId=149310780&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link

相关推荐
Bug退退退1233 小时前
RabbitMQ 高级特性之消息分发
java·分布式·spring·rabbitmq
许苑向上9 小时前
分布式缓存击穿以及本地击穿解决方案
java·分布式·缓存
EyeDropLyq9 小时前
从 0 到 1 掌握 自研企业级分布式 ID 发号器
分布式·架构
云淡风轻~~11 小时前
从 CSV文件的加载、分区和处理 来理解 Spark RDD
大数据·分布式·spark
Kevinyu_13 小时前
基于redis的分布式锁 lua脚本解决原子性
redis·分布式·lua
黄雪超14 小时前
Kafka——应该选择哪种Kafka?
大数据·分布式·kafka
项目題供诗14 小时前
Hadoop(二)
大数据·hadoop·分布式
武子康16 小时前
Java-74 深入浅出 RPC Dubbo Admin可视化管理 安装使用 源码编译、Docker启动
java·分布式·后端·spring·docker·rpc·dubbo
sniper_fandc16 小时前
RabbitMQ工作流程
分布式·rabbitmq