CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
RabbitMQ 入门/课时/综合练习
RawBlame
课时目录12 节

RabbitMQ 入门

  1. 01RabbitMQ 是什么
  2. 02核心概念
  3. 03Docker 运行 RabbitMQ
  4. 04发布与消费
  5. 05Exchange 类型
  6. 06Spring AMQP
  7. 07可靠性与死信
  8. 08常见模式
  9. 09RabbitMQ vs Kafka
  10. 10监控与管理
  11. 11Compose 联调
  12. 12综合练习

综合练习

订单通知 Topic Exchange 实验。

40 分钟

综合练习

在 spring-boot-essentials 项目完成 订单支付通知:支付成功写 MySQL 后,向 topic exchange 发 order.paid,邮件与审计两个 Queue 分别消费。串联 rmq-exchanges、rmq-spring、rmq-reliability。

学习目标

  • 实现 Topic Exchange + 双 Queue 绑定
  • 保证事务提交后再 publish,Consumer 幂等 + manual ack
  • 用 Management UI 验证路由与队列深度

核心内容

业务场景

POST /api/orders/{id}/pay  →  MySQL 状态=PAID  →  publish order.paid
                                                      |
                        +-----------------------------+------------------+
                        v                             v                  v
                 [queue.notify.email]        [queue.audit]         (可选 DLX)

用户只等支付 API;发邮件、写审计异步完成。与 kafka-practice 双消费组类似,但 RabbitMQ 消息 ack 后删除,无法按 offset 重放。

拓扑与代码要点

@Bean TopicExchange orderTopic() { return new TopicExchange("coderoadmap.order", true, false); }

@Bean Queue emailQueue() { return QueueBuilder.durable("coderoadmap.notify.email").build(); }

@Bean Binding emailBinding() {
    return BindingBuilder.bind(emailQueue()).to(orderTopic()).with("order.paid");
}
@Transactional
public void markPaid(long orderId) {
    orderRepo.updateStatus(orderId, PAID);
    // 事务提交后发送 — 可用 @TransactionalEventListener(phase = AFTER_COMMIT)
    publisher.publishPaid(orderId);
}

Consumer 用 orderId 做 Redis 去重(redis-patterns)或 DB 唯一键,失败 nack 进 DLX。

验收清单

步骤预期
Compose 起 RabbitMQ15672 可登录
支付 APIMySQL PAID + 两队列各 1 条
停邮件 Consumeremail Ready 上升,audit 仍消费
重复投递幂等,不重复发信

集成测试无 Broker 时 ()。

@Disabled
sb-test

练习

  • 完成上述拓扑并实现 @RabbitListener 双队列
  • 在 UI 手动 Publish order.created,验证只有绑定 order.* 的队列收到
  • 写一段选型说明:此练习若改 Kafka,要改哪些概念

小结

Topic 路由 + 事务后发消息 + 幂等消费 = RabbitMQ 入门闭环;CodeRoadMap 生产仍以 MySQL/REST 为准,RabbitMQ 是任务队列能力扩展。 本 track 完结;事件流见 kafka-essentials,缓存见 redis-essentials。

加载本节练习…
← 上一课Compose 联调