什么是消息队列
为了解决系统间通信的问题,常见的有
- 文件
- 数据库:不实时
- Socket:麻烦
- RPC:调用关系复杂
MQ解决了系统通信的如下问题:
- 异步通信
- 简化各个依赖关系
- 请求量大时可恶意缓冲
- 保证消息可靠
为什么要使用消息队列
- 异步通信
- 系统解耦
- 削峰
- 可靠通信
消息处理模式
- 点对点:PTP
- 发布订阅:PubSub
消息可靠处理
性能和可靠的平衡(QoS)
- 至多发一次:消息可能丢失,但不会重发
- 至少发一次:消息不会丢失,但可能会重发,如消息确认机制
重复消息处理:幂等、或者业务去重
- 精确发一次:消息肯定会被传输且仅发一次,如事务
消息有序性
同一个Queue可以保证顺序投递,但是如果做了消息分区或者多线程批量预取,就没顺序了
