什么是RabbitMQ?
RabbitMQ是由Erlang语言开发的实现了AMQP(高级消息队列协议)开源的面向消息中间件。
消息队列有什么作用?
消息队列可以实现消息的接收、存储、转发;
为什么要使用消息队列?
1、异步处理
2、业务解耦
3、流量削峰/平谷
4、消息广播
5、最终一致性
消息中间件都有哪些?
1、RabbitMQ
2、ActiveMQ
3、RocketMQ
4、Kafka
为什么要使用RabbitMQ?
1、基于AMQP协议
2、高并发
3、高性能
4、高可用
5、强大的社区支持,以及很多公司都在使用
6、支持插件
7、支持多语言
RabbitMQ的常用概念
Server:又称Borker,RabbitMQ所在的服务器;
Producter:生产者,消息的发送者;
Consumer:消费者,消息的接收者;
Connection:应用程序与Server之间的网络链接;
Channel:信道,应用程序与Server之间通过Channel进行消息读写,一个Connection中可以建立多个Channel,每一个Channel代表一个会话任务;
Exchange:交换机,RabbitMQ组成部分之一,主要负责接收消息,并根据消息中的routing key(路由key)或Arguments(参数)转发到特定的Queue(消息队列)中;
Queue:消息队列,RabbitMQ组成部分之一,主要负责存储和转发消息;
Routing key:一个虚拟地址,Exchange可用它来确定如何路由消息;
Bingding:Exchange与Queue之间通过Routing key或Arguments形成的虚拟连接,Bingding中包含Routing key和Arguments;
Virtual Host:其实是一个虚拟概念。类似于权限控制组,一个Virtual Host里面可以有若干个Exchange和Queue,可以用来隔离Exchange和Queue。,同一个Virtual Host里面不能有相同名称的Exchange和Queue。但是权限控制的最小粒度是Virtual Host。
RabbitMQ的模型
RabbitMQ的工作流程
1、Producter推送Message以及Exchange Name和Routing key到Server;
2、Server根据Exchange Name找到指定的Exchange,Exchange可以遍历其所有的Bingding中Routing key,与Message中Routing key进行匹配,若匹配成功,则将Message发送到匹配成功的Bingding中对应的Queue中;
3、消费者订阅Queue,当Queue中有Message时,自动发送给消费者;