前言
一、消息队列 MQ
- MQ,Message Queue 消息队列
为什么需要消息队列(MQ)
主要原因是由于在高并发环境下,同步请求来不及处理,请求往往会发生阻塞。比如大量的请求并发访问数据库,导致行锁表锁,最后请求线程会堆积过多,从而触发 too many connection 错误,引发雪崩效应。
我们使用消息队列,通过【异步处理】请求,从而缓解系统的压力。
消息队列常应用于 异步处理,流量削峰,应用解耦,消息通讯 等场景。
当前比较常见的 MQ 中间件有 ActiveMQ、RabbitMQ、RocketMQ、Pulsar。
使用消息队列的好处
(1)解耦
- 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。
(2)可恢复性
- 系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。
- 因为MQ 将消息保存在磁盘中,恢复后可以继续发送消息。
(3)缓冲(重点)
- 有助于控制和优化数据流经过系统的速度,解决生产消息(先缓存) 和 消费消息 的处理速度不一致的情况。
- 生产消息 先进行缓存,放到缓冲区,消费消息 再慢慢去取,去处理,起到缓冲效果。
(4)灵活性 & 峰值处理能力
- 在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。如果为以能处