--- id: backend.mq.index title: 消息队列(RabbitMQ / Kafka) type: index domain: backend stack: [mq] tags: [消息队列, RabbitMQ, Kafka, 异步, 削峰] week: [3, 14] --- # 消息队列(RabbitMQ / Kafka) 消息队列用来**异步解耦**(下单后发短信、加积分不阻塞主流程)、**削峰填谷**(抢购请求先进队列)、**广播**(一个事件多个系统消费)。招聘要求里 RabbitMQ 和 Kafka 都常见:业务系统多用 RabbitMQ,日志、埋点、数据管道多用 Kafka。面试最常问的是**可靠性、幂等、顺序、积压**。 ## 学习路线 | 顺序 | 课程 | 级别 | 预计 | | --- | --- | --- | --- | | 1 | [RabbitMQ:交换机、队列、确认机制、死信和延迟](01-rabbitmq.md) | 基础 | 3 小时 | | 2 | [Kafka:主题、分区、消费组、位移和顺序](02-kafka.md) | 进阶 | 3 小时 | | 3 | [可靠性:不丢消息、幂等消费、发件箱模式、积压处理](03-reliability.md) | 进阶 | 3 小时 | ## 企业场景 - [订单超时自动取消:延迟消息、幂等和兜底扫描](scenarios/delayed-order-cancel.md) ## 面试题 - [消息队列面试题](interview.md) ## 示例代码 - [examples/delay-cancel](examples/delay-cancel/):Python + aio-pika,用 TTL + 死信交换机实现延迟取消;设置 `AMQP_URL` 后运行 - [examples/outbox](examples/outbox/):只用标准库演示发件箱模式和幂等消费,直接运行 ## 在 16 周计划中 - [第 3 周:项目一(异步任务)](../../../plan/week03-project1.md)、[第 14 周:后端扩展](../../../plan/week14-backend-extend-deploy.md) ## 官方资料 - RabbitMQ 文档:https://www.rabbitmq.com/docs - Kafka 文档:https://kafka.apache.org/documentation/ - aio-pika:https://docs.aio-pika.com/