RabbitMQ消息中间件详解

一、初识消息中间件

1.概念

消 息:信息的载体
中间件:提供 软件和软件之间 连接的软件,用于软件和软件之间的的沟通

消息中间件:软件和软件之间,发送消息的软件(负责传递消息的)
    软件和硬件之间的连接是 操作系统 软件和人之间的连接是UI 软件和软件之间的连接 是中间件

2.优势

业务调用链短,用户等待时间短 (订单信息同步,先直接反馈给用户。而复杂的操作是在后面处理)
部分组件故障不会不会瘫痪整个业务(出现问题的消息会存储在中间件中)
业务高峰期有缓冲(会暂存在消息中间件中)
业务高峰期不会产生大量的异步线程

注:在微服务中,不要有长时间的异步线程,要保证每一个线程都是短的。因为长的线程很容易被杀掉


3.作用

解耦
异步处理
流量的削峰和流控
消息广播(可以一个服务,给多个服务发消息)
消息收集(多个微服务向一个微服务发消息)
最终一致性

4.分类


二、RabbitMQ高性能的原因

因为RabbitMQ底层使用 Erlang实现。而Erlang:

    在进程间上下文切换效率远高于C语言 基于虚拟机解释运行,能够跨平台部署 并且是通用的面向并发的编程语言,适用于分布式系统。

三、AMPQ协议

题外话: 学会了AMPQ协议的使用,就基本掌握了RabbitMQ的使用 学会了AMPQ协议的概念,就基本掌握了RabbitMQ协议的核心概念 AMPQ是RabbitMQ的规范,规定了RabbitMQ的对外接口

1.架构图

  1. Broker : 原译为代理商、中间人。Message Broker指的就是RabbitMQ。接收和分发消息的应用
  2. Virtual Host : 相当于虚拟的RabbitMQ,将多个单元隔开(很类似我们电脑中可以安装虚拟机)
  3. Connection : publisher/consumer和broker之间的TCP连接
  4. Channel : connection内部建立的逻辑连接,通常每个线程创建单独的channel
  5. Exchange : 交换机,相当于快递的分拨中心,是AMQP中的核心概念
  6. Queue : 消息队列,消息最终被送到这里等待consumer取走
  7. Binding : exchange和queue之间的虚拟连接,用于message的分发依据

2.核心概念:Exchange

3.Exchange解析

3.1Direct Exchange

Message中的Routing Key,如果和Binding Key一致,Direct Exchange则将message发到对应的queue中

就是说,消息会进入到和 Routing Key 、binding Key两者相互匹配的Queue中,注意,而不是Routing Key 和队列的直接匹配。

如果,binding Key 没有与之匹配的,那么这个消息会直接丢弃

3.2Fanout Exchange

fanout,原译为:扇形,扇形发散。Fanout Exchange 也是很形象,指 每个发到Fanout Exchange的 message都会分发到 所有绑定的queue上去

从上图我们可以看到,binding Key 消失了。不是没有了哈!!而是,不那么重要了,就不画出来了。消息直接发送到Exchange上,直接 群发广播到三个队列中(一条消息,变为3条)

(待更新,未完…)

经验分享 程序员 微信小程序 职场和发展