Appearance
项目总结
RabbitMQ 的工作模式
1. 工作队列模式(Work Queues)
Luca 总结
- 满足大部分场景,JoggAI 任务队列用的就是这个模式
- 默认 direct 交换机
📦 核心目标:让多个消费者分担耗时任务,实现异步解耦与负载均衡。
🌀 使用 Exchange:默认(direct 类型)
💡 典型案例:
- 图片处理任务:上传图片 → 放进队列 → 多个 worker 并行压缩。
- 发送邮件短信:前端触发事件 → 放入队列 → 异步发送,不阻塞主流程。
- 爬虫任务分发:一个生产者投递 URL,多台机器轮流爬取。
🎯 要点:
- 消息被轮询分配(Round-Robin)
- 配合
ack+ 持久化保障可靠性 - 一个消息只被一个消费者消费
🧠 面试话术:
“工作队列模式适合高并发下解耦主流程的异步任务,比如日志入库、文件转码、通知推送等。常用 direct exchange,让多个 worker 平均分摊任务。”
2. 发布/订阅模式(Publish/Subscribe)
Luca 总结
- 广播模式
- fanout 交换机
- routing key 没屌用
📦 核心目标:让消息广播给多个消费者,每个消费者都能收到副本。
🌀 使用 Exchange:fanout
💡 典型案例:
- 日志系统:一条日志广播给数据库存储服务、实时监控服务、告警系统。
- 全局通知推送:后台发布“系统维护公告”,所有客户端都收到。
- 分布式缓存刷新:一台机器修改缓存 → fanout 广播 → 所有节点同步更新。
🎯 要点:
- routing key 被忽略
- 所有绑定队列都能收到
- 典型广播型通信
🧠 面试话术:
“发布订阅模式适合多模块监听同一事件,比如系统广播、日志同步等。它用 fanout exchange,把消息复制给所有订阅者。”
3. 路由模式(Routing)
📦 核心目标:根据不同的 routing key 精确选择队列,做到定向投递。
🌀 使用 Exchange:direct
💡 典型案例:
- 日志分级:error → 队列 A,info → 队列 B。
- 多业务分流:
order.create发给订单服务,user.register发给用户服务。 - 多渠道消息分发:短信、邮件、微信,各自独立消费。
🎯 要点:
- routing key 必须精确匹配
- 不同队列绑定不同 binding key
- 常用于分类消费
🧠 面试话术:
“路由模式常用于日志分级、任务分流这类精确匹配场景。direct exchange 通过 routing key 实现点对点定向消息投递。”
4. 主题模式(Topics)
📦 核心目标:通过通配符匹配 routing key,实现灵活的多级订阅
🌀 使用 Exchange:topic
🪄 通配符规则:
*:匹配一个单词#:匹配多个单词
💡 典型案例:
- 物联网消息总线:
sensor.kitchen.temp、sensor.#→ 灵活订阅多级数据。 - 微服务事件系统:
user.login.success、order.payment.fail,模块可订阅特定主题。 - 多层级日志系统:
logs.api.error、logs.db.info,可模糊匹配。
🎯 要点:
- 支持层级化主题
- 模糊匹配,最灵活
- 常用于微服务事件流
🧠 面试话术:
“主题模式最灵活,适合多层级业务事件,比如 IoT、微服务系统的事件订阅。用 topic exchange,支持通配符匹配 routing key。”
总结
| 模式 | Exchange 类型 | 消息分发逻辑 | 典型场景 | 特点 |
|---|---|---|---|---|
| 工作队列 | direct | 轮询分发 | 异步任务、后台处理 | 解耦主流程 |
| 发布订阅 | fanout | 广播分发 | 日志系统、通知推送 | 一发多收 |
| 路由模式 | direct | 精确匹配 | 日志分级、任务分流 | 精细化控制 |
| 主题模式 | topic | 通配符匹配 | 微服务事件、IoT 系统 | 灵活多层级 |
Kafka
TODO
视频翻译
- 提取视频音频
- 音轨分离
为啥做音轨分离?音频的轨道分为人声轨、低音轨和节奏轨等,而接下来的声音克隆只需要人声轨
- 声音克隆
- 音频转录 ElevenLabs 的声音转文本
- 文本翻译
- TTS
- 基于 TTS 后音频的时候做视频加减速
- 唇型驱动和视频合成