RabbitMQ中通过Binding将Exchange与Queue关联起来,这样RabbitMQ就知道如何正确地将消息路由到指定的Queue了。
在绑定(Binding)Exchange与Queue的同时,一般会指定一个binding key;消费者将消息发送给Exchange时,一般会指定一个routing key;当binding key与routing key相匹配时,消息将会被路由到对应的Queue中。在绑定多个Queue到同一个Exchange的时候,这些Binding允许使用相同的binding key。binding key 并不是在所有情况下都生效,它依赖于Exchange Type,比如fanout类型的Exchange就会无视binding key,而是将消息路由到所有绑定到该Exchange的Queue。
fanout
fanout类型的Exchange路由会把所有发送到该Exchange的消息路由到所有与它绑定的Queue中。
direct
direct类型的Exchange路由会把消息路由到那些binding key与routing key完全匹配的queue中。
topic
topic类型的Exchange路由会把消息路由到binding key与routing key相匹配的Queue中。
匹配规则
①routing key为一个英文句点号‘·’分隔的字符串
②binding key与routing key一样也是‘·’分隔的字符串
③bingding key中可以存在两种特殊字符‘’与‘#’,用于做模糊匹配,其中‘’匹配一个单词,‘#’匹配多个单词(可以是零个)
header
header类型的Exchange根据发送的消息内容中的header属性进行匹配。在绑定Queue与Exchange时指定一组键值对。当消息发送到Exchange时,RabbitMQ会取到该消息的header,对比其中的键值对是否完全匹配Queue与Exchange绑定时指定的键值对,如果完全匹配则消息会路由到该Queue。