前言
本文不介绍RabbitMQ的具体使用方式,目的是理解MQ理解RabbitMQ的特点。
RabbitMQ介绍
1、什么是MQ
MQ是Message Queue(消息队列)的简写。通常消息队列会有生产者和消费者,生产者负责生产消息到队列中,而消费者需要在队列中去获取消息消费。
2、MQ的主要使用场景
1. 削峰
在请求到我们系统当中的时候,将所需内容转变成消息推送到队列中,消费者接着去消费消息,这样一来压力到了MQ当中,消费者按照自己能力来处理消息就行,而不是一股脑的来请求就处理。
2. 解耦
假设现在A服务有一个操作需要调用B和C服务,不接入MQ的情况下需要分开调用B和C服务。但是如果现在新增了一个D服务也需要被A服务调用呢,我们还需要回头去在A服务那个位置中加上调用D服务的代码,如果接入MQ的话,A服务直接面向MQ,BCD服务看到A服务推送的消息后各处理各的,这样就完成了解耦。
3. 异步
在解耦这一步其实也就完成了异步,BCD服务通知获取到消息异步处理。
3、RabbitMQ
RabbitMQ是用ErLang语言开发并实现了AMQP的开源消息队列中间件。
1. RabbitMQ的特点
- 可靠性
- 灵活的消息分发策略
- 支持集群
- 支持多种协议
- 支持多种语言客户端
- 可视化管理
- 插件机制
2. RabbitMQ的组成
- Broker:服务进程
- Exchange:队列交换机(负责将消息路由到队列中)
- Queue:队列(消息存放)
- Producer:生产者(负责推送消息)
- Consumer:消费者(负责消费消息)
3. Exchange的四种路由类型
我们需要清楚一点的是在Producer在推送消息的时候是不直接面向Queue的,而是面向Exchange并携带一个Routing Key(路由键),通过这个Key通过Exchange的不同路由类型也会匹配到不同的Queue。
1. Direct Exchange
Routing Key精准匹配,顾名思义直接指向指定Key的Queue。
2. Fanout Exchange
广播类型,Exchange所Binding(绑定)的所有Queue都会接收此消息,说的简单点就是发布订阅。
3. Topic Exchange
主题类型,我们倒不如理解成通配符类型,有两种通配符#和*。简单说一下,# 就是匹配之后的所有词,* 就是匹配之后的一个词,词于词之间用 . 隔开。
4. Header Exchange
头部类型,这个类型和Routing Key没有关系,而是通过头部去判断是否匹配,匹配规则有Any部分和All全部,此类型用的比较少。
本人有时间还会继续完善。