跳到主要内容
英文版本为准

本页译自英文,由模型翻译。若与英文原文存在差异,以英文原文为准。

交换机类型

每种交换机类型读取消息的不同部分来选择队列:路由键、路由键上的模式、什么都不读,或者消息头。

一条路由键为 order.eu.placed、带消息头 region=eu 的消息交给五种交换机类型,以及每种类型选出的队列交换机类型一条消息:路由键 order.eu.placed,消息头 region = eudirect路由键等于绑定键以 order.eu.placed绑定的队列topic路由键匹配模式以 order.*.placed 或order.# 绑定的队列fanout忽略路由键绑定到它的每个队列headersx-match = all 或 any绑定要求region = eu 的队列x-consistent-hash插件:路由键的哈希一个队列,按其权重比例选出
以文字阅读本图
  1. 交换机类型: direct 路由键等于绑定键; 以 order.eu.placed 绑定的队列; topic 路由键匹配模式; 以 order.*.placed 或 order.# 绑定的队列; fanout 忽略路由键; 绑定到它的 每个队列; headers x-match = all 或 any; 绑定要求 region = eu 的队列; x-consistent-hash 插件:路由键的哈希; 一个队列,按其 权重比例选出
  2. 一条消息:路由键 order.eu.placed, 消息头 region = eu → 交换机类型: 发布到
  3. direct 路由键等于绑定键 → 以 order.eu.placed 绑定的队列
  4. topic 路由键匹配模式 → 以 order.*.placed 或 order.# 绑定的队列
  5. fanout 忽略路由键 → 绑定到它的 每个队列
  6. headers x-match = all 或 any → 绑定要求 region = eu 的队列
  7. x-consistent-hash 插件:路由键的哈希 → 一个队列,按其 权重比例选出

direct 交换机把消息复制到绑定键与其路由键相等的每个队列。默认交换机就是一个 direct 交换机,每个队列都以自己的名字绑定到它。

topic 交换机把路由键看作以点分隔的词。绑定是这些词上的一个模式:* 恰好匹配一个词,# 匹配零个或多个词。路由键 order.eu.placed 匹配 order.*.placed 和 order.#,不匹配 order.*。

fanout 交换机忽略路由键,把消息复制到绑定它的每个队列。

headers 交换机同样忽略路由键。它把消息的消息头与绑定的参数比较。x-match 设为 all 时,每个参数都必须匹配;设为 any 时,匹配一个就够了。在本 crate 中,带参数的绑定是 bind_with。

一条消息可以匹配多个绑定。这时它到达每个匹配的队列,每个队列一次。

一致性哈希交换机来自 RabbitMQ 自带的一个插件,需要启用。它对路由键求哈希,把消息发往一个绑定的队列。绑定的键就是它的权重:以权重 2 绑定的队列得到的键,大约是以权重 1 绑定的队列的两倍。正常运行时,路由键相同的消息进入同一个队列;节点重启可能把某个键移到另一个队列。本 crate 在 plugin-consistent-hash feature 下以 RabbitExchange::consistent_hash 提供它,工作分区与顺序把它与单个订阅内部的工作分区做了比较。

RabbitExchange 指定绑定所用的交换机。custom 指定插件添加的其他任何类型。

路由规则来自 RabbitMQ(交换机、topic 交换机、一致性哈希交换机)。