RabbitMQ 个人笔记

91 阅读2分钟

前言

本文不介绍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:消费者(负责消费消息)

image.png

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全部,此类型用的比较少。


本人有时间还会继续完善。