1. 消息队列的应用场景
1.1 异步处理
用户注册时,将发送邮件和发送短信功能放入消息队列,可提高响应时间和系统吞吐量。
1.2 应用解耦
用户下单和库存扣账间使用消息,防止库存系统故障导致下单失败。
1.3 流量削峰
秒杀活动中,通过消息队列限制人数,丢弃过多请求,防止服务器宕机。
1.4 日志处理
- 日志采集客户端:定时写入 Kafka 队列
- Kafka 消息队列:负责日志数据的接收、存储和转发
- 日志处理应用:订阅并消费 Kafka 队列中的日志数据,配合 ELK Stack(Elasticsearch, Logstash, Kafka)分析
1.5 消息通讯
支持点对点通讯及聊天室等场景。
2. 消息的重发补偿解决思路
3. 消息的幂等性解决思路
4. 消息的堆积解决思路
处理消息堆积的方法就是把它存下来。存储方式包括内存、分布式 KV、磁盘或数据库。归结起来主要有持久化和非持久化两种。持久化形式能更大程度地保证消息的可靠性(如断电等不可抗外力),并且理论上能承载更大限度的消息堆积。但并不是每种消息都需要持久化存储。很多消息对于投递性能的要求大于可靠性的要求,且数量极大(如日志)。这时候,消息不落地直接暂存内存,尝试几次 failover,最终投递出去也未尝不可。市面上的消息队列普遍两种形式都支持。具体的场景还要结合公司的业务来看。

