哪些问题适合使用消息队列来解决
异步处理
如:秒杀系统
可以更快的返回结果
减少等待,自然实现了步骤之间的并发,提高系统总体性能
流量控制
1、使用消息队列隔离网关和后台服务
流程
网关在收到请求后,将请求放入请求消息队列
后端服务从请求消息队列中获取 APP 请求,完成后续秒杀处理
image.png
缺点
- 增加了系统调用链环节,导致总体的响应时延变长
-上下游系统都要将同步调用改为异步消息,增加了系统的复杂度。
2、令牌桶
不需要改变调用链,用一个有固定容量的消息队列加一个“令牌发生器”来实现:令牌发生器按照预估的处理能力,匀速生产令牌并放入令牌队列(如果队列满了则丢弃令牌),网关在收到请求时去令牌队列消费一个令牌,获取到令牌则继续调用后端秒杀服务,如果获取不到令牌则直接返回秒杀失败
服务解耦
其他场景
- 作为发布 / 订阅系统实现一个微服务级系统间的观察者模式;
- 连接流计算任务和数据;
- 用于将消息广播给大量接收者
消息队列会产生的问题和局限
- 延迟问题
- 增加系统复杂度
- 可能产生数据不一致的问题
内容来源说明:文章中的部分内容以及图片来自《极客时间-消息队列高手课》,写文章目的只是作为学习后的总结和整理