为什么需要消息队列
1.解决问题
主要功能就是收发消息,但不仅仅是解决应用之间的通信问题
2.使用场景
2.1 异步处理
eg.
秒杀系统
流程:风险控制——库存锁定——生成订单——短信通知——更新统计数据
使用消息队列服务器只需要先实现风控和库存锁定
好处
更快返回结果;减少等待,提升系统功能
2.2 流量控制
健壮框架设计思路: 使用消息队列隔离网关和后端服务,以达到流量控制和保护后端服务的目的。
设计优点.: 能根据下游的处理能力自动调节流量,达到“削峰填谷”的作用
令牌桶控制流量:
2.3 服务解耦
3.总结
消息队列的本质是将同步处理转成异步处理,异步会带来相应的好处,但也有弊端。
Pros:
1.可在模块、服务、接口等不同粒度上实现解耦
2.订阅/消费模式也可在数据粒度上解耦
3.可提高系统的并发能力,集中力量办大事(同步部分),碎片时间做小事(异步部分)
4.可提高系统可用性,因为缓冲了系统负载
Cons:
1.降低了数据一致性,如要保持强一致性,需要高代价的补偿(如分布式事务、对账)
2.有数据丢失风险,如宕机重启,如要保证队列数据可用,需要额外机制保证(如双活容灾)
总体来说,消息队列的适用场景还是很多的,如秒杀、发邮件、发短信、高并发订单等,不适合的场景如银行转账、电信开户、第三方支付等。关键还是要意识到消息队列的优劣点,然后分析场景是否适用则会水到渠成。