Exchange 交换机详解

什么交换机?

Exchange:接收消息,并根据路由键转发消息所绑定的队列。
交换机

  • 蓝色框表示发送消息,主要任务就是把消息投递到交换机,交换机路由消息到指定的队列。
  • 绿色框表示接收消息,客户端和队列建立监听。
  • 中间红色虚线框只要就是RabbitMQ服务端。
  • 中间黄色框就是路由键和一个绑定关系,就是说交换机和队列建立一个绑定,当消息到达了交换机以后,再进入queue1还是queue2的规则主要还是通过RoutingKey。

交换机的属性

  • Name:交换机名称
  • Type:交换机类型direct、topic、fanout、headers
  • Durability:是否需要持久化,true表示需要
  • Auto Delete:当最后一个绑定到Exchange上的队列删除后,自动删除该Exchange
  • Internal:当前Exchange是否用于RabbitMQ内部使用,默认为false
  • Arguments:扩展参数,用于扩展AMQP协议自制定化使用

Direct Exchange

  • 所有发送到Direct Exchange的消息被转发到RouteKey中指定的Queue,即和RouteKey一一对应
  • Direct模式可以使用RabbitMQ自带的Exchange:default Exchange,所以不需要将Exchange进行任何绑定操作,消息传递时,RouteKey必须完全匹配才会被队列接收,否则该消息会被抛弃。
  • 图解:
    direct exchange

Topic Exchange

  • 所有发送到Topic Exchange的消息被转发到所有关心RouteKey中指定Topic的Queue上。
  • Exchange将RouteKey和某Topic进行模糊匹配,此时队列需要绑定一个Topic。
    • 符号“#”:匹配一个或多个词,例如“log.#”能够匹配到“log.info.oa”
    • 符号“*”:只匹配一个词,例如“log.*”只会匹配到“log.erro”
  • 图解:
    topic exchange

Fanout Exchange

  • 不处理路由键,只需要简单的将队列绑定到交换机上
  • 发送到交换机的消息都会被转发到与该交换机绑定的所有队列上
  • Fanout交换机转发消息是最快的,它不会做各种路由匹配
  • 图解:
    fanout exchange