一、MQ的意义
1. 流量消峰
在应用请求的高峰期,可以使用消息队列做缓冲,将一部分的请求先保存,从而达到缓解作用。
2. 应用解耦
当业务流程中发生故障时,应用的请求将会被保存于消息队列之中,等待故障板块修护后,在进行处理,提升系统的可靠性。
3. 异步处理
在消息的发送与接收的时候,可以将请求都统一交给MQ,让MQ处理请求的接受与发送,从而便可以达到异步处理的效果。
二、RabbitMQ相关名词
- Broker:接收和分发消息的应用
- Connection:publisher/consumer和broker之间的tcp连接
- Channel:channel是connection内部的逻辑连接,通常每个Thread创建单独的channel,channel相互完全隔离
- Exchange:message到达的第一站,相当于路由器,根据规则分发,匹配routing key,分发到queue
- Queue:消息最终等待队列,等待consumer取走
三、流程图
四、消费模式
1. 基本消息模式
- P:生产者,也就是要发送消息的程序
- C:消费者:消息的接受者,会一直等待消息到来。
- queue:消息队列,图中红色部分。可以缓存消息;生产者向其中投递消息,消费者从其中取出消息。
2. work消息模式
3. Publish/Sucribe
- 1) 声明Exchange,不再声明Queue
- 2) 发送消息到Exchange,不再发送到Queue
4. Routing路由模式
P:生产者,向Exchange发送消息,发送消息时,会指定一个routing key。
X:Exchange(交换机),接收生产者的消息,然后把消息递交给 与routing key完全匹配的队列
C1:消费者,其所在队列指定了需要routing key 为 error 的消息
C2:消费者,其所在队列指定了需要routing key 为 info、error、warning 的消息