RocketMQ 实战——如何优雅地实现异步任务与消息幂等

55 阅读1分钟
  1. 前言

    • 为什么要用消息队列?(解耦、削峰、异步)
    • 常见 MQ 对比:Kafka、RabbitMQ、RocketMQ
    • 本文聚焦 RocketMQ 的实际应用
  2. RocketMQ 核心机制

    • Producer、Consumer、Broker、NameServer
    • 消息存储模型(CommitLog + ConsumeQueue + IndexFile)
    • 顺序消息、延时消息、事务消息
  3. 异步任务的最佳实践

    • 业务场景:导出大文件、通知下游系统、批量计算
    • 生产者发送消息(带 key)
    • 消费者异步消费
    • 失败重试 & 死信队列
  4. 消息幂等性问题

    • 为什么会重复消费?(网络重试、Broker ACK、消费者重启)

    • 幂等解决方案:

      • 唯一业务 ID + 数据库唯一约束
      • Redis Set 去重
      • 业务逻辑层判断(状态机模式)
  5. 实战案例

    • 用户批量导出 Excel:

      • Controller -> MQ -> 异步任务消费 -> 生成文件 -> OSS 存储 -> 回调通知
    • 支付系统异步通知:

      • 保证消息必达
      • 幂等校验(支付订单状态)
  6. 性能调优

    • 消息批量发送
    • 消费者并发度优化
    • 消息堆积监控与报警
  7. 总结

    • MQ 是架构解耦的重要基石
    • RocketMQ 适合高吞吐低延迟的场景
    • 幂等 + 异步是后端架构的“必修课”