rabbitmq
引用
https://cloud.tencent.com/developer/article/2337286

Producer(消息生产者):负责发送消息到消息队列。
Queue(消息队列):用于存储消息的缓冲区,降低消息的发送和接收的时间差。
Consumer(消息消费者):从消息队列获取消息并进行处理。
Exchange(交换机):接收来自生产者的消息,并根据一定的规则将消息路由到一个或多个队列。
Binding(绑定):用于将交换机和队列绑定在一起,确定消息的路由规则。
RabbitMQ 中,交换机有四种类型:Direct、Fanout、Topic 和 Headers。每种交换机类型都有不同的路由规则,可以更好地满足不同应用场景的需求
1. Direct Exchange(直连交换机)
- 路由规则:消息的 Routing Key 必须完全匹配队列绑定时指定的 Binding Key。
- 特点:点对点或精确路由。
- 适用场景:
- 任务分发到特定工作队列(如按任务类型:
email,sms)。 - 日志级别过滤(如只处理
error级别的日程)。
- 任务分发到特定工作队列(如按任务类型:
✅ 示例:
绑定:Queue A ← binding key =
发布消息 routing key =
绑定:Queue A ← binding key =
"order.created"发布消息 routing key =
"order.created" → 被 Queue A 接收。2. Fanout Exchange(扇出交换机)
- 路由规则:忽略 Routing Key,将消息广播到所有绑定的队列。
- 特点:一对多广播,不关心路由键。
- 适用场景:
- 实时通知系统(如用户注册后同时发送邮件、短信、站内信)。
- 缓存刷新、日志同步等需要多消费者并行处理的场景。
✅ 示例:
无论 routing key 是什么,只要队列绑定了 Fanout Exchange,就会收到消息。
无论 routing key 是什么,只要队列绑定了 Fanout Exchange,就会收到消息。
3. Topic Exchange(主题交换机)
- 路由规则:基于 通配符模式匹配 Routing Key 和 Binding Key。
*匹配一个单词(如user.*匹配user.login,但不匹配user.profile.update)#匹配零个或多个单词(如log.#匹配log.info、log.error.db)
- 特点:灵活的多维度路由。
- 适用场景:
- 多维度消息分类(如
stock.usd.nyse、stock.eur.nasdaq)。 - 微服务中按业务域+事件类型路由(如
order.shipped.us,payment.failed.cn)。
- 多维度消息分类(如
✅ 示例:
Binding Key:
可匹配:
Binding Key:
"*.error.#"可匹配:
app.error.db, web.error.auth.timeout,但不匹配 info.warning4. Headers Exchange(头信息交换机)
- 路由规则:不依赖 Routing Key,而是根据消息的 headers 属性(键值对)进行匹配。
- 支持
x-match = all(全部匹配)或x-match = any(任一匹配)。
- 支持
- 特点:基于元数据路由,较为少见。
- 适用场景:
- 需要复杂匹配条件且不适合用字符串 Routing Key 表达的场景。
- 例如:根据消息格式(
format=json)、版本(version=2.0)等路由。
⚠️ 注意:Headers Exchange 性能通常低于其他类型,且使用复杂,在实际项目中较少使用。

浙公网安备 33010602011771号