消息队列面试指南


一、消息队列基础

1.1 消息队列的作用

作用 说明 示例场景
解耦 生产者和消费者独立演进 订单系统与库存系统解耦
异步 非核心流程异步处理 注册后异步发送邮件
削峰 平滑处理流量高峰 秒杀请求写入队列慢慢消费
同步调用:
用户 → 订单服务 → 库存服务 → 积分服务 → 通知服务 → 响应
                    (任一服务慢或失败,整体受影响)

异步解耦:
用户 → 订单服务 → 响应
         ↓
      消息队列
    ↙    ↓    ↘
库存服务 积分服务 通知服务

1.2 消息队列的优缺点

优点:

缺点:

1.3 消息队列选型对比

特性 Kafka RabbitMQ RocketMQ
开发语言 Scala/Java Erlang Java
吞吐量 百万级 万级 十万级
延迟 毫秒级 微秒级 毫秒级
消息可靠性 高 高 高
事务消息 支持 支持 原生支持
延迟消息 不支持 支持(插件) 原生支持
消息顺序 Partition 内有序 队列内有序 队列内有序
消息回溯 支持 不支持 支持
适用场景 日志、大数据、流处理 业务消息、复杂路由 电商、金融、业务消息

选型建议:

1.4 消息模型

点对点模型(P2P):

生产者 → Queue → 消费者
           ↘ 消费者(竞争消费)

发布订阅模型(Pub/Sub):

生产者 → Topic → 订阅者1
              → 订阅者2
              → 订阅者3