RabbitMQ原理详解(史上最全原理图文解析)

RabbitMQ原理详解(史上最全原理图文解析)-mikechen

RabbitMQ定义

RabbitMQ原理详解(史上最全原理图文解析)-mikechen

RabbitMQ是一款使用Erlang语言开发的,实现了高级消息队列协议(AMQP)的开源消息中间件。

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议是应用层协议的一个开放标准,为面向消息的中间件设计。

Erlang语言,主要用于并发及分布式系统的开发,在电信领域应用广泛,OTP作为Erlang语言的一部分,包含了很多基于Erlang开发的中间件及工具库。

 

RabbitMQ作用

1.解耦

用了消息队列后,只要保证消息格式不变,消息的发送方和接收方并不需要彼此联系,也不需要受对方的影响,即解耦。

RabbitMQ原理详解(史上最全原理图文解析)-mikechen

2.异步

RabbitMQ原理详解(史上最全原理图文解析)-mikechen

异步就是将比较耗时而且不需要即时(同步)返回结果的操作,通过消息队列来实现异步化。

 

3.削峰

RabbitMQ原理详解(史上最全原理图文解析)-mikechen

并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常。

 

RabbitMQ工作原理

要理解RabbitMQ的工作原理,如下图所示:

RabbitMQ原理详解(史上最全原理图文解析)-mikechen

RabbitMQ的工作原理,主要包含从消息的生成到消息的消费的全过程,其中会涉及如下组件:Broker、Exchange、Queue等组件

所以,要更好的理解RabbitMQ的工作原理,需要理解这些组件的作用。

1.RabbitMQ核心组件

1)Broker:简单来说就是消息队列服务器实体;

2)Exchange:即消息交换机,它指定消息按什么规则,路由到哪个队列;

3)Queue:也就是消息队列载体,每个消息都会被投入到一个或多个队列;

4)Binding:就是把exchange和queue按照路由规则绑定起来;

5)Routing Key:即路由关键字,exchange根据这个关键字进行消息投递;

6)VHost:vhost 可以理解为虚拟 broker ,即 mini-RabbitMQ server;

7)Producer:这个大家都比较清楚了,就是消息生产者,就是生成消息的程序;

8)Consumer:这个大家也比较清楚,就是消息消费者,就是接受消息的程序;

9)Channel:即可消息通道,可建立多个channel,每个channel代表一个会话任务;

 

2.RabbitMQ工作流程

把RabbitMQ的组件理解后,下面理解RabbitMQ的工作原理就容易了,主要就是:这些组件是怎样流转的。

RabbitMQ的工作流程:

第一步:生产者生产消息

主要就是:消息生产者(Producer),通过信道(Channel),把消息发送给交换机(Exchange)。

 

第二步:交换机接收消息

交换机(Exchange)接收消息,并且负责对消息进行路由,交换机根据消息的属性来把消息分发到不同的队列(Queue)上。

这里的交互机会涉及如下四种类型:

  1. 直接Direct;
  2. 扇出Fanout ;
  3. 主题Topic ;
  4. 消息头Headers;

 

第三步:消费消息

消费者监听RabbitMQ中的(Queue)队列中的消息,然后去消费。

备注:消息(Message)会一直留在队列里,直到被消费者(Consumer)消费。

 

RabbitMQ 的工作模式

RabbitMQ的工作模式,主要包含如下5种:

1)简单模式

如下图所示:

RabbitMQ原理详解(史上最全原理图文解析)-mikechen

一个队列中一条消息,只能被一个消费者消费。

 

2)工作队列模式

如下图所示:

RabbitMQ原理详解(史上最全原理图文解析)-mikechen

默认情况下,RabbitMQ将按顺序将每条消息发送给下一个消费者。

 

3)发布订阅模式

如下图所示:

RabbitMQ原理详解(史上最全原理图文解析)-mikechen

多个队列,多个消费者。

 

4)路由模式

如下图所示:

RabbitMQ原理详解(史上最全原理图文解析)-mikechen

主要根据定义的路由规则决定消息往哪个队列发送。

 

5)Topic通配符模式

如下图所示:

RabbitMQ原理详解(史上最全原理图文解析)-mikechen

模糊匹配路由规则,多个队列,多个消费者。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法