消息队列-RabbitMQ的介绍与安装

151 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 13 天,点击查看活动详情

消息队列-RabbitMQ

学习目标:

  • 理解消息队列的概念、使用场景
  • 掌握AMQP的协议模型和相关概念
  • 会实现RabbitMQ的安装

1. RabbitMQ概述

1.1.什么是MQ

消息队列,即MQ,Message Queue。

1527063872737.png

消息队列是典型的:生产者、消费者模型。

生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,这样就实现了生产者和消费者的解耦。

1.2.为什么要用MQ

MQ在企业中有很多的应用场景,例如:

  • 异步调用
  • 业务解耦
  • 流量削峰
  • 分布式事务

1.2.1.异步调用

例如这样的场景:用户注册后,需要发注册邮件和注册短信。

1)传统做法(同步调用):

将注册信息持久化后,发送注册邮件,再发送注册短信。三个业务全部完成后,返回给客户端。

image-20200522165217567.png

用户注册后,要等待发送邮件、发送短信等业务逐个串行执行,整个业务耗时300ms。

2)MQ调用(异步调用)

引入MQ以后,执行流程如图:

image-20200522165426544.png

用户注册成功,直接向MQ发送消息,然后业务结束,用户拿到结果,耗时105ms。

邮件、短信服务都监听MQ消息,接收到消息后各自完成自己业务,互不干扰。

整个注册业务流程大大简化,耗时也缩短了很多倍,并发能力就会有极大的提升。

1.2.2.业务解耦

例如系统A执行完业务,系统B需要得到系统A的业务结果,此时可以系统A中调用系统B

(系统A中耦合了系统B的业务)。

此时如果系统C、系统D都有类似需求,那么系统A的业务逻辑还要继续修改,违反了开闭原则。

1574829165382.png

此时,可以利用MQ来解耦,让商品微服务发送消息通知,而相关的其它系统监听MQ即可:

1574829207585.png

1.2.3.流量削峰

数据库的并发能力有限,往往称为业务执行的性能瓶颈。

例如我们的服务只能支持500的并发,然而又每秒1000甚至更高的服务流量涌入,服务肯定会崩溃的。

1574829378276.png

此时,利用MQ来作为缓冲,就像大坝一样,高并发流量涌入,先放到MQ中缓存起来,后续系统再慢慢取出并处理即可:

1574829476538.png

1.3.AMQP和JMS

MQ是消息通信的模型,不是具体实现。现在实现MQ的有两种主流方式:AMQP、JMS。

1527064480681.png

1527064487042.png

两者间的区别和联系:

  • JMS是定义了统一的接口,来对消息操作进行统一;AMQP是通过规定协议来统一数据交互的格式
  • JMS限定了必须使用Java语言;AMQP只是协议,不规定实现方式,因此是跨语言的。
  • JMS规定了两种消息模型;而AMQP的消息模型更加丰富

1.4.常见MQ产品

常见的消息组件有:Kafka、ActiveMQ、RabbitMQ、RocketMQ ,关于他们之间的对比也有各种各样的讨论,下面我们看看关于它们的总结:

1586308937006.png

ActiveMQ现在已经很少使用,社区不太活跃,放弃。

RabbitMQ并发能力强、消息延时低、高可用、管理界面丰富,并且最重要的是:社区非常活跃,出现BUG都能及时解决。

Kafka和RocketMQ的特点都是高吞吐量,但是kafka消息可靠性比较一般,而且消息不保证有序性。

RocketMQ弥补了Kafka的缺点,不过是阿里开源,社区不太活跃,文档也不够丰富。

对应中小型企业,建议使用RabbitMQ,大中型公司,建议使用RocketMQ。

1.5.RabbitMQ介绍

RabbitMQ是基于AMQP的一款消息管理系统

官网: www.rabbitmq.com/

官方教程:www.rabbitmq.com/getstarted.…

1527064881869.png

1527064762982.png

RabbitMQ基于Erlang语言开发:

1527065024587.png

2.RabbitMQ下载和安装

官网下载地址:www.rabbitmq.com/download.ht…

快速入门地址:www.rabbitmq.com/getstarted.…

此处我们以windows为主

安装步骤如下:

2.1 windows环境安装rabbitmq

一、下载安装软件

rabbit的安装依赖于erlang,所以得先安装erlang:

00.png

erlang安装

erlang下载www.erlang.org/downloads

01.png

下载好的exe文件直接双击运行:

04.png

05.png

06.png

07.png

08.png

设置环境变量:

10.png

验证erlang环境:

09.png

rabbit安装

rabbitmq下载:www.rabbitmq.com/download.ht…

02.png

03.png

双击exe文件直接安装:

12.png

13.png

14.png

cmd进入安装目录:C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.6\sbin

15.png

安装web管理插件:

rabbitmq-plugins.bat enable rabbitmq_management

17.png

18.png

guest/guest登入:

19.png

到此rabbitmq就安装好了!

2.6.使用管理界面

1)界面总览

1570592912783.png

2)用户权限管理

我们新建的itcast用户,不具备访问权限,如图:

1569411896139.png

我们需要添加对virtual hosts的访问权限,点击itcast用户,进入用户管理界面,然后添加权限:

1569411896139.png

添加权限以后,可以看到用户已经具备了访问权:

1569411955659.png