rabbitmq

引用

https://cloud.tencent.com/developer/article/2337286

 

image

 

Producer(消息生产者):负责发送消息到消息队列。

Queue(消息队列):用于存储消息的缓冲区,降低消息的发送和接收的时间差。

Consumer(消息消费者):从消息队列获取消息并进行处理。

Exchange(交换机):接收来自生产者的消息,并根据一定的规则将消息路由到一个或多个队列。

Binding(绑定):用于将交换机和队列绑定在一起,确定消息的路由规则。

 

RabbitMQ 中,交换机有四种类型:Direct、Fanout、Topic 和 Headers。每种交换机类型都有不同的路由规则,可以更好地满足不同应用场景的需求

1. Direct Exchange(直连交换机)

  • 路由规则:消息的 Routing Key 必须完全匹配队列绑定时指定的 Binding Key。
  • 特点:点对点或精确路由。
  • 适用场景
    • 任务分发到特定工作队列(如按任务类型:emailsms)。
    • 日志级别过滤(如只处理 error 级别的日程)。
✅ 示例:
绑定:Queue A ← binding key = "order.created"
发布消息 routing key = "order.created" → 被 Queue A 接收。

2. Fanout Exchange(扇出交换机)

  • 路由规则忽略 Routing Key,将消息广播到所有绑定的队列
  • 特点:一对多广播,不关心路由键。
  • 适用场景
    • 实时通知系统(如用户注册后同时发送邮件、短信、站内信)。
    • 缓存刷新、日志同步等需要多消费者并行处理的场景。
✅ 示例:
无论 routing key 是什么,只要队列绑定了 Fanout Exchange,就会收到消息。

3. Topic Exchange(主题交换机)

  • 路由规则:基于 通配符模式匹配 Routing Key 和 Binding Key。
    • * 匹配一个单词(如 user.* 匹配 user.login,但不匹配 user.profile.update
    • # 匹配零个或多个单词(如 log.# 匹配 log.infolog.error.db
  • 特点:灵活的多维度路由。
  • 适用场景
    • 多维度消息分类(如 stock.usd.nysestock.eur.nasdaq)。
    • 微服务中按业务域+事件类型路由(如 order.shipped.uspayment.failed.cn)。
✅ 示例:
Binding Key: "*.error.#"
可匹配:app.error.dbweb.error.auth.timeout,但不匹配 info.warning

4. Headers Exchange(头信息交换机)

  • 路由规则:不依赖 Routing Key,而是根据消息的 headers 属性(键值对)进行匹配。
    • 支持 x-match = all(全部匹配)或 x-match = any(任一匹配)。
  • 特点:基于元数据路由,较为少见。
  • 适用场景
    • 需要复杂匹配条件且不适合用字符串 Routing Key 表达的场景。
    • 例如:根据消息格式(format=json)、版本(version=2.0)等路由。
⚠️ 注意:Headers Exchange 性能通常低于其他类型,且使用复杂,在实际项目中较少使用

 

posted @ 2026-02-26 09:25  qx和世界  阅读(10)  评论(0)    收藏  举报