复习要点
为什么使用消息队列?- 使用消息队列有什么缺点?
- 消息队列如何选型?
- 如何保证消息队列是高可用的?
- 如何保证消息不被重复消费?
- 如何保证消费的可靠性传输?
- 如何保证消息的顺序性?
问题一:为什么使用消息队列?
解耦、异步、削峰
1. 解耦
传统模式的缺点:
- 系统间耦合性太强,如上图所示,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦!
消息队列模式:
- 将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统A不需要做任何修改。
2.异步
传统模式的缺点:
- 一些非必要的业务逻辑以同步的方式运行,太耗费时间。
消息队列模式:
- 将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度
3.削峰
传统模式的缺点:
- 并发量大的时候,所有的请求直接怼到数据库,造成数据库压力过大
消息队列形式
- 系统A慢慢的按照数据库能处理的并发量,从消息队列中慢慢拉取消息(pull模式)。在生产中,这个短暂的高峰期积压是允许的。
网上比较好的形容:通过一个队列在一端承接瞬时的流量洪峰,在另一端平滑地将消息推送出去。在这里,消息队列就像“水库”一样,拦蓄上游的洪水,削减进入下游河道的洪峰流量,从而达到减免洪水灾害的目的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。