RabbitMQ定义
RabbitMQ是一款使用Erlang语言开发的,实现了高级消息队列协议(AMQP)的开源消息中间件。
AMQP,即Advanced Message Queuing Protocol,高级消息队列协议是应用层协议的一个开放标准,为面向消息的中间件设计。
Erlang语言,主要用于并发及分布式系统的开发,在电信领域应用广泛,OTP作为Erlang语言的一部分,包含了很多基于Erlang开发的中间件及工具库。
RabbitMQ作用
1.解耦
用了消息队列后,只要保证消息格式不变,消息的发送方和接收方并不需要彼此联系,也不需要受对方的影响,即解耦。
2.异步
异步就是将比较耗时而且不需要即时(同步)返回结果的操作,通过消息队列来实现异步化。
3.削峰
并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常。
RabbitMQ工作原理
要理解RabbitMQ的工作原理,如下图所示:
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)上。
这里的交互机会涉及如下四种类型:
- 直接Direct;
- 扇出Fanout ;
- 主题Topic ;
- 消息头Headers;
第三步:消费消息
消费者监听RabbitMQ中的(Queue)队列中的消息,然后去消费。
备注:消息(Message)会一直留在队列里,直到被消费者(Consumer)消费。
RabbitMQ 的工作模式
RabbitMQ的工作模式,主要包含如下5种:
1)简单模式
如下图所示:
一个队列中一条消息,只能被一个消费者消费。
2)工作队列模式
如下图所示:
默认情况下,RabbitMQ将按顺序将每条消息发送给下一个消费者。
3)发布订阅模式
如下图所示:
多个队列,多个消费者。
4)路由模式
如下图所示:
主要根据定义的路由规则决定消息往哪个队列发送。
5)Topic通配符模式
如下图所示:
模糊匹配路由规则,多个队列,多个消费者。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》