更新时间:2024-10-18 GMT+08:00

Exchange类型介绍

Exchange主要包含6种类型:Direct、Fanout、Topic、Header、x-delayed-message和x-consistent-hash。

Direct Exchange

工作原理:

  1. 将一个Queue绑定到某个Direct Exchange上,并赋予该绑定一个Routing Key。
  2. 当一个携带着Routing Key的消息被发送给Direct Exchange时,Direct Exchange会将它路由给与绑定Queue时设置的Routing Key完全匹配的Queue。

路由规则:

Direct Exchange会将消息路由到Routing Key完全匹配的Queue中。

应用场景:

Direct Exchange常用于单播路由。

应用示例:

图1 Direct Exchange示例

如上图所示,Message A将会发送到Queue 1和Queue 2中,Message B将会发送到Queue 3中。

Fanout Exchange

工作原理:

如果有N个Queue绑定了Fanout Exchange,当Fanout Exchange接收到一个消息时,会将它分别路由到这N个Queue中。Fanout Exchange是所有Exchange类型中转发消息最快的。

路由规则:

Fanout Exchange将消息路由到所有与其绑定的Queue中。

应用场景:

Fanout Exchange常用于广播消息。

应用示例:

图2 Fanout Exchange示例

如上图所示,Message A将会发送到Queue 1和Queue 2中。

Topic Exchange

工作原理:

  1. 将一个Queue绑定到某个Topic Exchange上,并赋予该绑定一个Routing Key,此Routing Key包含通配符。
  2. 当一个携带着Routing Key的消息被发送给Topic Exchange时,Topic Exchange会将Routing Key进行通配符匹配,如果匹配成功,则将它路由给对应的Queue。

Topic Exchange的通配符包括“*”和“#”,单词间通过“.”隔开,例如test.#。

  • *表示一个单词。
  • #表示零个、一个或者多个单词。

路由规则:

Topic Exchange会将Routing Key进行通配符匹配,然后将消息路由到匹配成功的Queue中。

应用场景:

Topic Exchange常用于多播路由。

应用示例:

图3 Topic Exchange示例

如上图所示,Message A将会发送到Queue 1和Queue 2,Message B将会发送到Queue 1、Queue 2和Queue 3,Message C将会发送到Queue 3。

Header Exchange

工作原理:

  1. 将一个Queue绑定到某个Header Exchange上,并设置绑定属性键值对。
  2. 将消息发送给Header Exchange时,需要设置消息的Header属性键值对,Header Exchange根据消息Headers属性键值对和绑定属性键值对的匹配情况路由消息。

匹配算法由一个特殊的绑定属性键值对控制。该属性为“x-match”,它的取值如下:

  • x-match=all,表示所有的消息Headers属性键值对和绑定属性键值对都匹配才会路由消息。
  • x-match=any,表示只要有一组消息Headers属性键值对和绑定属性键值对匹配,就会路由消息。

路由规则:

Header Exchange根据消息Headers属性键值对和绑定属性键值对的匹配情况路由消息。

应用示例:

图4 Header Exchange示例

如上图所示,Message A将会发送到Queue 1和Queue 2,Message B将会发送到Queue 2。

x-delayed-message Exchange

工作原理:

  1. 创建x-delayed-message Exchange,并指定Exchange类型,Exchange类型用于确定路由规则。支持x-delayed-message的Exchange类型为:Direct ExchangeFanout ExchangeTopic ExchangeHeader Exchange
  2. 将一个Queue绑定到某个x-delayed-message Exchange。
  3. 将消息发送给x-delayed-message Exchange时,需要设置消息的Header属性“x-delay”,“x-delay”用于指定消息延迟投递的时间,单位为毫秒。
  4. x-delayed-message Exchange接收到消息后,不会立刻投递,而是在到达延迟投递时间后才会根据Exchange类型的路由规则路由消息。

路由规则:

根据创建x-delayed-message Exchange时设定的Exchange类型的路由规则路由消息。

应用场景:

x-delayed-message Exchange适用于需要延时投递消息的场景。

应用示例:

以Exchange类型为“direct”介绍。

图5 x-delayed-message Exchange示例

如上图所示,x-delayed-message Exchange在接收到Message A后,等待100毫秒,然后将Message A发送到Queue 1和Queue 2。

x-consistent-hash Exchange

工作原理:

  1. 将一个Queue绑定到某个x-consistent-hash Exchange上,并赋予该绑定一个Routing Key,此Routing Key需要设置为正整数。Routing Key表示Queue的权重。数值越大,Queue的权重越大,分发消息时接收到的消息越多。
  2. 当一个携带着Routing Key的消息被发送给x-consistent-hash Exchange时,x-consistent-hash Exchange会根据Routing Key计算出一个hash值,并按照hash值将消息分发给对应的Queue。

路由规则:

x-consistent-hash Exchange会根据Routing Key计算出一个hash值,按照hash值将消息路由到对应的Queue中。

应用示例:

图6 x-consistent-hash Exchange示例

如上图所示,x-consistent-hash Exchange在接收到Message A和Message B后,会根据它们携带的Routing Key计算出一个hash值,根据hash值将消息路由到对应的Queue中。Queue 1的权重为1,Queue 2的权重为2,因此Queue 2接收到的消息数量会是Queue 1的2倍。