RabbitMQ系列文章之交换机类型简述

RabbitMQ通过Exchange(交换机)将消息根据不同规则路由到对应的Queue(队列)中,本文主要简述交换机的四种类型,仅供学习分享使用,如有不足之处,还请指正。.

RabbitMQ系列文章之交换机类型简述

RabbitMQ交换机类型


RabbitMQ一共四种交换机,如下所示:

  1. Direct Exchange:直连交换机,根据Routing Key(路由键)进行投递到不同队列。

  2. Fanout Exchange:扇形交换机,采用广播模式,根据绑定的交换机,路由到与之对应的所有队列。

  3. Topic Exchange:主题交换机,对路由键进行模式匹配后进行投递,符号#表示一个或多个词,*表示一个词。

  4. Header Exchange:头交换机,不处理路由键。而是根据发送的消息内容中的headers属性进行匹配。

Direct Exchange


直连交换机,根据Routing Key(路由键)进行投递到不同队列。

单个绑定,一个路由键对应一个队列。如下所示:

RabbitMQ系列文章之交换机类型简述

多个绑定,一个路由键对应多个队列,则消息会分别投递到两个队列中,如下所示:

RabbitMQ系列文章之交换机类型简述

Fanout Exchange


扇形交换机,采用广播模式,根据绑定的交换机,路由到与之对应的所有队列。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。Fanout交换机转发消息是最快的。

RabbitMQ系列文章之交换机类型简述

Topic Exchange


主题交换机,对路由键进行模式匹配后进行投递,符号#表示一个或多个词,*表示一个词。因此“abc.#”能够匹配到“abc.def.ghi”,但是“abc.*” 只会匹配到“abc.def”。如下所示:

RabbitMQ系列文章之交换机类型简述

Header Exchange


头交换机,不处理路由键。而是根据发送的消息内容中的headers属性进行匹配。在绑定Queue与Exchange时指定一组键值对;当消息发送到RabbitMQ时会取到该消息的headers与Exchange绑定时指定的键值对进行匹配;如果完全匹配则消息会路由到该队列,否则不会路由到该队列。headers属性是一个键值对,可以是Hashtable,键值对的值可以是任何类型。而fanout,direct,topic 的路由键都需要要字符串形式的。

匹配规则x-match有下列两种类型:

x-match = all :表示所有的键值对都匹配才能接受到消息

x-match = any :表示只要有键值对匹配就能接受到消息

消息头交换机,如下图所示:

RabbitMQ系列文章之交换机类型简述

以上就是RabbitMQ常见的四种交换机模式。