1.什么是RabbitMQ
MQ是Message Queue,也就是消息队列,是一个消息中间件,使用Erlang语言写的。
2.工作模型
(1)Broker:中介。提供一种传输服务,维护一条从生产者到消费者的传输线路,保证消息数据能按照指定的方式传输。粗略的可以将图中的RabbitMQ Server当作Broker。
(2)Exchange:消息交换机。指定消息按照什么规则路由到哪个队列Queue。生产者不能直接和Queue建立连接,而是通过交换机进行消息分发。
(3)Queue:消息队列。消息的载体,每条消息都会被投送到一个或多个队列中。
(4)Binding:绑定。作用就是将Exchange和Queue按照某种路由规则绑定起来。
(5)RoutingKey:路由关键字。消息所携带的标志,Exchange根据RoutingKey进行消息投递。
(6)Vhost:虚拟主机。一个Broker可以有多个虚拟主机,用作不同用户的权限分离。一个虚拟主机持有一组Exchange、Queue和Binding。
(7)Producer:消息生产者。主要将消息投递到对应的Exchange上面。一般是独立的程序。
(8)Consumer:消息消费者。消息的接收者,一般是独立的程序。
(9)Channel:消息通道,也称信道,是连接消费者和Broker的虚拟连接,如果直接让消费者和Broker建立TCP的连接,会让Broker有性能损耗。在客户端的每个连接里可以建立多个Channel,每个Channel代表一个会话任务。
3.工作流程
- 生产者通过消息通道(channel)与RabbitMQ建立连
- 消息传送到Exchange,并且消息上有对应的标志关键字(RoutingKey)
- Exchange接收到消息后,就根据消息的RoutingKey和已经设置的binding,进行消息路由(投递),将消息投递到一个或多个队列(Queue)里
- 消费者(Consumer)客户端从对应的队列中获取并处理消息
4.Exchange类型
- Direct
全匹配式传递。当RoutingKey和消息标志完全一样才会存放到对应的队列
- Topic
广播式全部传递。息都会被投递到所有与此Exchange绑定的queue中
- Fanout
匹配式传递。
# 表示0个或多个单词
*表示1个