rabbitmq 交换器 exchange常用的四种类型

一般常用的类型有四种: fanout,direct,topic ,headers。 AMQP协议里还提到另外两种类型:System和自定义,这里先不说这两种,先说说常用的四种类型。
 
fanout: 
    fanout会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中。
direct:
    direct 类型的交换器路由规则也很简单,会把消息路由到那些Bindingkey和Routingkey完全匹配的队列中。
    如图所示,交换器类型为direct,如果我们发送一条消息,并在发送消息的时候设置路由键为 “warning”,则消息会路由到queue1和queue2 ,对应的代码示例如下:
 
            channel.basicPublish(exchange_name,”warning”,MessageProperties.PERSISTENT_TEXT_PLAIN,message.getBytes());
 
    如果在发送消息的时候设置路由为info 或者是 debug, 消息只会路由到queue2,如果以其他路由键发送消息,则消息不会路由到这两个队列中。
 
    topic
    前面讲到direct 类型的交换器路由规则是与bindingkey和routingkey完全陪陪。但是这种严格得匹配方式在很多情况下不能满足实际业务需求。topic类型的交换器在匹配规则上进行了扩展,他与direct类型的交换器相似,也是将消息路由到bindingkey和routingkey 相匹配的队列中,但这里的匹配规则有些不同,约定:
  •    routingkey为一个点号“.”分隔字符串(被点号“.”分隔开的每一段独立的符号串称为一个单词),如“com.rabbitmq.client”、“java.util.concurrent”、“com.hidden.client”
  • bindingkey和routingkey 一样是点号“.”分隔的字符串
  • bindingkey中可以存在两种特殊字符串“*”和“#”,用于做模糊匹配,其中“*”用于匹配一个单词, “#”用于匹配多个单词。如图所示。
 
 
 
headers:
    headers 类型的交换器不依赖与路由键的匹配规则来路由消息,而是根据发送消息的内容中的headers属性进行匹配,在绑定队列和交换器时指定一组键值对,当发送消息到交换器时,rabbitmq会获取到消息的header(也是一个键值对的形式),对比其中的键值对是否完全匹配队列和交换器绑定时指定的键值对,如果完全匹配则消息会路由到该队列,否则不会路由到该队列,headers类型的交换器性能会很差,且不实用,不推荐使用。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

猜你喜欢

转载自www.cnblogs.com/kry-stal/p/12739755.html