RabbitMQ交换机类型
RabbitMQ一共四种交换机,如下所示:
Direct Exchange:直连交换机,根据Routing Key(路由键)进行投递到不同队列。
Fanout Exchange:扇形交换机,采用广播模式,根据绑定的交换机,路由到与之对应的所有队列。
Topic Exchange:主题交换机,对路由键进行模式匹配后进行投递,符号#表示一个或多个词,*表示一个词。
Header Exchange:头交换机,不处理路由键。而是根据发送的消息内容中的headers属性进行匹配。
1.fanout
该类型的交换机会将⼀条消息⼴播到绑定到该交换机的所有队列上,不论你设置的路由键是什么
2.direct
直连交换机,根据Routing Key(路由键)进行投递到不同队列。该类型的交换机会将绑定的路由键完全匹配的⽅式路由到指定的队列上。如果路由键不匹配,那么就不会发送到任何队列中去。
单个绑定,一个路由键对应一个队列。如下所示:
多个绑定,一个路由键对应多个队列,则消息会分别投递到两个队列中,如下所示:
3.topic
该种类型的交换机会是对上述fanout和direct类型的交换机的⼀种扩展。其和direct很类似,但是匹配规则上有所不同。其约定的路由匹配
规则有:
routingkey通过符号“.”进⾏分割,其分割出来的单词就是路由的匹配元素。⽐如com.aa.tian这种就表示顺序单词com、aa、tian。
符号星花和“#”分别⽤来进⾏模糊匹配,其中“”用来表示⼀个单词,“#”用来匹配多个单词。
总结⼀下就是符号“”表示⼀个单词,“#”表示多个单词
Header Exchange
头交换机,不处理路由键。而是根据发送的消息内容中的headers属性进行匹配。在绑定Queue与Exchange时指定一组键值对;当消息发送到RabbitMQ时会取到该消息的headers与Exchange绑定时指定的键值对进行匹配;如果完全匹配则消息会路由到该队列,否则不会路由到该队列。headers属性是一个键值对,可以是Hashtable,键值对的值可以是任何类型。而fanout,direct,topic 的路由键都需要要字符串形式的。
匹配规则x-match有下列两种类型:
x-match = all :表示所有的键值对都匹配才能接受到消息
x-match = any :表示只要有键值对匹配就能接受到消息
消息头交换机,如下图所示: