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

相关推荐
用户8307196840821 天前
RabbitMQ vs RocketMQ 事务大对决:一个在“裸奔”,一个在“开挂”?
后端·rabbitmq·rocketmq
初次攀爬者2 天前
RabbitMQ的消息模式和高级特性
后端·消息队列·rabbitmq
初次攀爬者4 天前
ZooKeeper 实现分布式锁的两种方式
分布式·后端·zookeeper
让我上个超影吧5 天前
消息队列——RabbitMQ(高级)
java·rabbitmq
塔中妖5 天前
Windows 安装 RabbitMQ 详细教程(含 Erlang 环境配置)
windows·rabbitmq·erlang
断手当码农5 天前
Redis 实现分布式锁的三种方式
数据库·redis·分布式
初次攀爬者5 天前
Redis分布式锁实现的三种方式-基于setnx,lua脚本和Redisson
redis·分布式·后端
业精于勤_荒于稀5 天前
物流订单系统99.99%可用性全链路容灾体系落地操作手册
分布式
Ronin3055 天前
信道管理模块和异步线程模块
开发语言·c++·rabbitmq·异步线程·信道管理
Asher05095 天前
Hadoop核心技术与实战指南
大数据·hadoop·分布式