MQ全称为Message Queue,即消息队列, RabbitMQ是由erlang语言开发,基于AMQP(Advanced MessageQueue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。
在实际的工作中使用MQ的两大原因:
- 任务异步:将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。提高了应用程序的响应时间。
- 应用程序解耦和:MQ相当于一个中介,生产方通过MQ与消费方交互,它将应用程序进行解耦合。
市面上流行的MQ:ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ、Redis。
为什么使用RabbitMQ呢?1、使得简单,功能强大。2、基于AMQP协议。3、社区活跃,文档完善。4、高并发性能好,这主要得益于Erlang语言。5、Spring Boot默认已集成RabbitMQ.
RabbitMQ的工作原理
组成部分说明如下:
Broker:消息的队列进程。包括:Exchange和Queue
Exchange:消息交换机。负责将消息按照规则路由转发到队列,进行消息的过滤。
Queue:消息队列。存储消息且将消息转发到消费者。
Producer:消息的生产者。负责将消息转发到MQ.
Consumer:消息的消费者。负责从MQ获取消息进行消费。
消息发布接收流程:
- 生产者和Broker建立tcp连接。
- 生产者和Broker建立通道。
- 生产者通过通道将消息发送给Broker.
- Broker通过exchange交换机将消息转发。
- Exchange将消息转发到指定的Queue(队列)
----接收消息----
- 消费者和Broker建立tcp连接。
- 消费者和Broker建立通道。
- 消费者监听制定的queue。
- 当有消息到达时进行消息消费
RabbitMQ有以下几种工作模式 :
Work queues
work queues与入门程序相比,多了一个消费端,两个消费端共同消费同一个队列中的消息。
应用场景:对于任务过重或任务较多情况使用工作队列可以提高任务处理的速度。
特征:
结果:
1、一条消息只会被一个消费者接收;
2、rabbit采用轮询的方式将消息是平均发送给消费者的;
3、消费者在处理完某条消息后,才会收到下一条消息。
Publish/Subscribe
发布订阅模式:
1、每个消费者监听自己的队列
2、生产者将消息发给broker,由交换机将消息转发到绑定此交换机的每个队列,每个绑定交换机的队列都将接收
到消息
Routing
路由模式:
1、每个消费者监听自己的队列,并且设置routingkey。
2、生产者将消息发给交换机,由交换机根据routingkey来转发消息到指定的队列。
Topics
路由模式:
1、每个消费者监听自己的队列,并且设置带统配符的routingkey。
2、生产者将消息发给broker,由交换机根据routingkey来转发消息到指定的队列
Header
header模式与routing不同的地方在于,header模式取消routingkey,使用header中的 key/value(键值对)匹配队列。
RPC
用得不多,不再赘述。