1 MQ的基本概念
- RabbitMQ是一个开源的消息代理和队列服务器,它使用Erlang语言编写并运行在多种操作系统上,如Linux、Windows等。RabbitMQ可以接收、存储和转发消息(也称为“事件”)到连接的客户端。它适用于多种场景,包括异步通信、流量削峰、应用解耦等。
1.1 同步和异步
同步: 多个服务之间顺序执行
- 优点: 时效性强
- 缺点: 耦合度高,性能降低,有额外的资源消耗,有级联失效的问题
异步: 多个服务之间同时执行
- 事件驱动
- 事件发布者(Publisher)
- 中间人(Broker)
- 事件订阅者(Consumer)
1.2 MQ概述
MQ全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信。
发送方称为生产者,接收方称为消费者
1.3 MQ的优势和劣势
1.3.1 优势
1.3.1.1 应用解耦
系统的耦合性越高,容错性就越低,可维护性就越低。
使用 MQ 使得应用间解耦,提升容错性和可维护性。
1.3.1.2 异步提速
一个下单操作耗时:20 + 300 + 300 + 300 = 920ms 用户点击完下单按钮后,需要等待920ms才能得到下单响应,太慢!
我们可以在使用MQ后,流程如下
用户点击完下单按钮后,只需等待25ms就能得到下单响应 (20 + 5 = 25ms)。
提升用户体验和系统吞吐量(单位时间内处理请求的数目)。
1.3.1.3 削峰填谷
添加MQ后,可以把请求先缓存在MQ中
使用了 MQ 之后,限制消费消息的速度为1000,这样一来,高峰期产生的数据势必会被积压在 MQ 中,高峰 就被“削”掉了,但是因为消息积压,在高峰期过后的一段时间内,消费消息的速度还是会维持在1000,直 到消费完积压的消息,这就叫做"填谷"。
使用MQ后,可以提高系统稳定性。
1.4 常见的MQ产品
1.4.1 产品区别
1.4.2 使用建议
追求可用性:Kafka、 RocketMQ 、RabbitMQ
追求可靠性:RabbitMQ、RocketMQ
追求吞吐能力:RocketMQ、Kafka
追求消息低延迟:RabbitMQ、Kafka