通常我们说到交换机类型一般是在发布/订阅模式下讨论的,简单模式(点对点)可以不使用交换机

1. Direct Exchange(直连)

处理路由键。队列绑定到交换机上,指定一个特定的路由键,消息到达交换机,要求携带的路由键完全匹配才会分发到队列。如果一个队列绑定到交换机上,指定路由键为“abc”,则只有标记为“abc”的消息会被分发到队列,标记为“abc.def”的消息不会被分发。
direct.png

2. Fanout Exchange(扇形)

不处理路由键。队列绑定到交换机, 一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上 ,类似广播。
fanout.png

3. Topic Exchange(主题)

将路由键和某模式进行匹配。队列绑定到交换机上,指定路由键的匹配模式(主题)。其中符号#表示一个或多个词,*表示一个词。因此“abc.#”能够匹配到“abc.def.ghi”,但是“abc.” 只会匹配到“abc.def”。
绑定键有两种特殊类型:

  • *符号用来代替任意单词
  • 符号可以代替0个或多个单词

备注:
Topic型交换器比较强大跟其它交换器很相似。
当一个队列以”#”作为绑定键时,它将接收所有消息,而不管路由键如何,类似于fanout型交换器。
当特殊字符”*”、”#”没有用到绑定时,topic型交换器就好比direct型交换器了。

topic.png

4. Headers Exchange(头部)

不处理路由键。队列绑定到交换机,指定一组键值对。根据消息内容的headers属性进行匹配。当消息到达MQ,会取出消息的headers和交换机的键值对进行匹配;如果完全匹配则分发到队列,否则不分发到队列。
headers属性是一个键值对,可以是Hashtable,键值对的值可以是任何类型。而fanout,direct,topic 的路由键都需要要字符串形式的。
匹配规则x-match有下列两种类型:
x-match = all :表示所有的键值对都匹配才能接受到消息
x-match = any :表示只要有键值对匹配就能接受到消息
headers.png