消息队列面试指南


一、消息队列基础

1.1 消息队列的作用

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

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

1.2 消息队列的优缺点

优点

缺点

1.3 消息队列选型对比

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

选型建议

1.4 消息模型

点对点模型(P2P)

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

发布订阅模型(Pub/Sub)

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