1、初识MQ
什么是MQ
MQ (MessageQueue),中文是消息队列,字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。
1.1 同步通讯
同步调用的优点:
- 时效性较强,可以立即得到结果
同步调用存在的问题
- 耦合度高:每次加入新的需求,都要修改原来的代码
- 性能下降:调用者需要等待服务提供者响应,如果调用链过长则响应时间等于每次调用的时间之和。
- 资源浪费:调用链中的每个服务在等待响应过程中,不能释放请求占用的资源,高并发场景下会极度浪费系统资源
- 级联失败:如果服务提供者出现问题,所有调用方都会跟着出问题,如同多米诺骨牌一样,迅速导致整个微服务群故障
异步调用方案
异步调用常见实现就是事件驱动模式
1.2 异步通讯
异步通信的优点:
事件驱动优势
- 优势一: 服务解耦
- 优势二:性能提升,吞吐量提高
- 优势三:服务没有强依赖,不担心级联失败问题
- 优势四:流量削峰
异步通信的缺点:
- ·依赖于Broker的可靠性、安全性、吞吐能力
- ·架构复杂了,业务没有明显的流程线,不好追踪管理
1.3 MQ常见框架
2、RabbitMQ快速入门
2.1 RabbitMQ概述和安装
RabbitMQ概述
RabbitMQ是基于Erlang语言开发的开源消息通信中间件,官网地址: https://www.rabbitmq.com/
2.2 单机部署
我们在Centos7虚拟机中使用Docker来安装。
下载镜像
方式一:在线拉取
docker pull rabbitmq:3-management
方式二:从本地加载
已经提供了镜像包:
上传到虚拟机中后,使用命令加载镜像即可:
docker load -i mq.tar
2.3 安装MQ
执行下面的命令来运行MQ容器:
docker run \
-e RABBITMQ_DEFAULT_USER=设置自己的账号 \
-e RABBITMQ_DEFAULT_PASS=设置自己的密码 \
--name mq \
--hostname mq1 \
-p 15672:15672 \
-p 5672:5672 \
-d \
rabbitmq:3-management
2.4 登录
2.5 集群部署
接下来,我们看看如何安装RabbitMQ的集群。
2.6 集群分类
在RabbitMQ的官方文档中,讲述了两种集群的配置方式:
- 普通模式:普通模式集群不进行数据同步,每个MQ都有自己的队列、数据信息(其它元数据信息如交换机等会同步)。例如我们有2个MQ:mq1,和mq2,如果你的消息在mq1,而你连接到了mq2,那么mq2会去mq1拉取消息,然后返回给你。如果mq1宕机,消息就会丢失。
- 镜像模式:与普通模式不同,队列会在各个mq的镜像节点之间同步,因此你连接到任何一个镜像节点,均可获取到消息。而且如果一个节点宕机,并不会导致数据丢失。不过,这种方式增加了数据同步的带宽消耗。
我们先来看普通模式集群。
2.7 设置网络
首先,我们需要让3台MQ互相知道对方的存在。
分别在3台机器中,设置 /etc/hosts文件,添加如下内容:
192.168.150.101 mq1
192.168.150.102 mq2
192.168.150.103 mq3
并在每台机器上测试,是否可以ping通对方: