Skip to content

RabbitMQ Exchanges 类型

🏷️ RabbitMQ

RabbitMQ 支持 4 种类型的 Exchange

合理使用 Exchange 可以降低代码和队列之间的耦合度。

1. Default Exchange

默认 Exchange 名为 空字符串""),且已被预创建

每个队列创建时会自动的绑定到该 默认 Exchange,且 路由 Key队列名 相同。

直接发布消息到队列时,实际上是由 默认 Exchange 根据 路由 Key 来分配的。

2. Direct Exchange

使用前需要创建 绑定(binding),绑定时需指定 队列名路由 Key

Direct Exchange 接收到的消息会根据消息中的 路由 Key 发送到对应的已绑定队列。
如果一个 绑定(binding) 中指定的 路由 Key 和 消息中的 路由 Key 相同(message.routeKey == binding.routeKey),则会发送一份消息的复制到该 绑定(binding) 中设置的队列。

  • 相同的 路由 Key 可以绑定到多个不同的 队列
  • 一个 队列 也可以绑定多个不同的 路由 Key

3. Fanout Exchange

Fanout Exchange 接收到的消息会被路由到 所有已绑定的队列

这里 路由 Key 将被忽略。

4. Topic Exchange

Topic Exchange 类似于 Direct Exchange,也需要先创建 绑定(binding) 才能使用。

不同之处在于其 路由 Key 支持模糊匹配

Topic Exchange路由 Key 必须是由一组单词组成,单词间通过 .(半角点)分隔开。

路由 Key 最长 255 字节

例: stock.usd.nysenyse.vmwquick.orange.rabbit

通配符:

  • * (星号):匹配 一个 单词
  • # (井号):匹配 0 个多个 单词

原文:Distributing Messages Using Rabbitmq with Advanced Message Exchanges