RabbitMQ交换机类型
作者:互联网
先明确什么是交换机
RabbitMQ 消息传递模型的核心思想是: 生产者生产的消息从不会直接发送到队列。实际上,通常生产 者甚至都不知道这些消息传递传递到了哪些队列中。 相反,生产者只能将消息发送到交换机(exchange),交换机工作的内容非常简单,一方面它接收来 自生产者的消息,另一方面将它们推入队列。交换机必须确切知道如何处理收到的消息。是应该把这些消 息放到特定队列还是说把他们到许多队列中还是说应该丢弃它们。这就的由交换机的类型来决定。
RabbitMQ交换机类型
RabbitMQ一共四种交换机,如下所示:
- Direct Exchange:直连交换机,根据Routing Key(路由键)进行投递到不同队列。
- Fanout Exchange:扇出交换机,Fanout 这种类型非常简单。正如从名称中猜到的那样,它是将接收到的所有消息广播到它知道的 所有队列中。
- Topic Exchange:主题交换机,对路由键进行模式匹配后进行投递,符号#表示一个或多个词,*表示一个词。
- Header Exchange:标头换机,不处理路由键。而是根据发送的消息内容中的headers属性进行匹配。
一、Direct Exchange
直连交换机,根据Routing Key(路由键)进行投递到不同队列。
单个绑定,一个路由键对应一个队列。如下所示:
多个绑定,一个路由键对应多个队列,则消息会分别投递到两个队列中,如下所示:
二、Fanout Exchange
扇形交换机,采用广播模式,根据绑定的交换机,路由到与之对应的所有队列。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。Fanout交换机转发消息是最快的。
三、Topic Exchange
主题交换机,对路由键进行模式匹配后进行投递,符号#表示一个或多个词,*表示一个词。因此“abc.#”能够匹配到“abc.def.ghi”,但是“abc.*” 只会匹配到“abc.def”。如下所示:
四、Header Exchange
头交换机,不处理路由键。而是根据发送的消息内容中的headers属性进行匹配。在绑定Queue与Exchange时指定一组键值对;当消息发送到RabbitMQ时会取到该消息的headers与Exchange绑定时指定的键值对进行匹配;如果完全匹配则消息会路由到该队列,否则不会路由到该队列。headers属性是一个键值对,可以是Hashtable,键值对的值可以是任何类型。而fanout,direct,topic 的路由键都需要要字符串形式的。
匹配规则x-match有下列两种类型:
x-match = all :表示所有的键值对都匹配才能接受到消息
x-match = any :表示只要有键值对匹配就能接受到消息
消息头交换机,如下图所示:
以上就是RabbitMQ常见的四种交换机模式。
标签:Exchange,队列,RabbitMQ,交换机,键值,消息,类型,路由 来源: https://www.cnblogs.com/ashs/p/16488056.html