RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)实现的消息队列。
RabbitMQ
一、工作原理
- Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue。
- Exchange:消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过滤。
- Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的消费方。
- Producer:消息生产者,即生产方客户端,生产方客户端将消费发送到MQ。
- Consumer:消息消费者,即消费方客户端,接收MQ转发的消息。
- Connection:Producer、Consumer和Broker的网络连接,是TCP连接。
- Channel:信道,建立在TCP上面的虚拟连接。
- Bind:绑定,Exchange和Queue之间的虚拟连接,其中可以包含一个或者多个RoutingKey。
- RoutingKey:路由键,Producer发送消息给Exchange的时候,会发送一个RoutingKey,用来指定路由规则,Exchange根据RoutingKey把消息发送到指定Queue。
TCP通信需要三次握手、四次挥手,开销较大,所以在TCP上建立了Channel。TCP连接可以容纳无限的信道,所有线程共享一个TCP连接,每个线程私有一个信道,所以不会有并发上面的性能瓶颈。
二、工作模式:
1、简单模式
- 一个生产者,一个队列,一个消费者。
生产者将消息发送到队列,消费者从队列中获取消息。
2、work queue(工作模式)
- 一个生产者,一个队列,多个消费者。
生产者将消息发送到队列,有多个消费者监听同一个队列,谁先获取到消息谁负责消费,消息一旦被消费,就会消失,因此消息不会被重复执行。
3、订阅模式
- 1个生产者,多个消费者。
- 每一个消费者都有自己的一个队列。
- 生产者将消息发送给交换机。
- 每个队列都要和交换机绑定。
- 消息经过交换机到达队列,最后被消费者消费。
- 交换机如何处理消息,取决于交换机的类型。
交换机类型:
- Fanout:广播,将消息交给所有绑定到交换机的队列。
- Direct:定向,把消息交给符合RoutingKey的队列。
- Topic:通配符,把消息交给符合RoutingKey模糊匹配的队列。
3.1、订阅模式-Fanout
适用于Fanout交换机类型。
3.2、订阅模式-Direct
适用于Direct交换机类型。
3.3、订阅模式-Topic
适用于Topic交换机类型。