作用

  1. 解耦
  2. 异步处理
  3. 负载均衡/削峰/限流

两种模式

  1. 点对点模式
    • 消息队列
    • 生产者
    • 消费者
  2. 发布/订阅模式
    • 角色主题
    • 发布者
    • 订阅者

常用消息队列

  1. RabbitMQ
  2. ActiveMQ
  3. RocketMQ
  4. Kafka

需要解决哪些问题?

  1. 高可用(也就是必须是分布式的,单机的无法高可用)
  2. 持久化
  3. 消费者如何得到消息
    • push:当消息队列中有数据了,通知消费者
    • pull:轮询
  4. 重复消费问题怎么解决?
    • 如何避免重复
    • 如何鉴别重复消息并幂等执行
      • 版本号:类似tcp的sequence号,肯定可以避免重复执行(source+seq)
      • 状态机:
      • 全局唯一id
      • 去重表
      • source+序列号
  5. 如何保证绝对有序?
  6. RPC
    • 服务端包括两个RPC,一个用来接收消息,一个用来确认消息收到