什么是消息队列

为了解决系统间通信的问题,常见的有

  • 文件
  • 数据库:不实时
  • Socket:麻烦
  • RPC:调用关系复杂

MQ解决了系统通信的如下问题:

  • 异步通信
  • 简化各个依赖关系
  • 请求量大时可恶意缓冲
  • 保证消息可靠

为什么要使用消息队列

  • 异步通信
  • 系统解耦
  • 削峰
  • 可靠通信

消息处理模式

  • 点对点:PTP
  • 发布订阅:PubSub

消息可靠处理

性能和可靠的平衡(QoS)

  • 至多发一次:消息可能丢失,但不会重发
  • 至少发一次:消息不会丢失,但可能会重发,如消息确认机制

重复消息处理:幂等、或者业务去重

  • 精确发一次:消息肯定会被传输且仅发一次,如事务

消息有序性

同一个Queue可以保证顺序投递,但是如果做了消息分区或者多线程批量预取,就没顺序了