常用的Exchange类型有4种
direct:Exchange将消息发送对应的Queue(RoutingKey=BindingKey)
topic :Exchange将消息发送给匹配RoutingKey的BindingKey所绑定Queue(RoutingKey符合BindingKey)
fanout:Exchange将消息发送给该Exchange绑定的所有Queue(RoutingKey和BindingKey没存在的必要,可以随便写)
headers:通过配置一些key-value将Exchange与Queue进行绑定(RoutingKey和BindingKey没存在的必要,可以随便写)
直连交换机(Direct Exchange)
交换机将会对 binding key 和 routing key 进行精准匹配,从而确定消息该分发到哪个队列
在这个场景中,我们可以看到交换机 x 和两个队列Q1和Q2进行了绑定,Q1使用 orange 作为 binding key,Q2 有2个 binding key,分别是 black 和 green,这样一来,当路由键为 orange 的消息发布到交换机,就会被路由到队列 Q1。路由键为 black 或者 green 的消息就会路由到 Q2。其他的所有消息都将会被丢弃。
多个绑定(Multiple bindings)
多个队列使用相同的 binding key 是合法的,这个例子中,我们可以添加一个 X 和 Q1 之间的绑定,使用 black 绑定键。这样一来,直连交换机就和扇型交换机的行为一样,会将消息广播到所有匹配的队列。带有 black 路由键的消息会同时发送到 Q1 和 Q2。
主题交换机(Topic Exchange)
发送到主题交换机(Topic Exchange)的消息不可以携带随意什么样子的路由键(Routing Key),它的路由键必须由一个 '.'分隔开的词语列表,这些单词随便是什么都可以,但是最好是跟携带它们的消息有关系的词汇。
绑定键也必须拥有同样的格式。主题交换机背后的逻辑跟直连交换机很相似 —— 一个携带着特定路由键的消息会被主题交换机投递给绑定键与之想匹配的队列。但是它的绑定键和路由键有两个特殊应用方式:
- (*号) 用来表示一个单词
- (井号) 用来表示任意数量(零个或多个)单词
扇形交换机(Fanout Exchange)
扇形交换机是最基本的交换机类型,它做的事情很简单–广播信息。Fanout交换机会把接收到的消息全部转发到绑定的队列上。因为广播不需要“思考”,所以Fanout交换机是四种交换机中速度最快的。
fanout类型的Exchange路由规则非常简单,它会把所有发送到该Exchange的消息路由到所有与它绑定的Queue中,所以此时routing key是不起作用的。