什么交换机?
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必须完全匹配才会被队列接收,否则该消息会被抛弃。 - 图解:
Topic Exchange
- 所有发送到Topic Exchange的消息被转发到所有关心RouteKey中指定Topic的Queue上。
- Exchange将RouteKey和某Topic进行
模糊匹配,此时队列需要绑定一个Topic。-
符号“#”:匹配一个或多个词,例如“log.#”能够匹配到“log.info.oa” -
符号“*”:只匹配一个词,例如“log.*”只会匹配到“log.erro”
-
- 图解:
Fanout Exchange
- 不处理路由键,只需要简单的将队列绑定到交换机上
- 发送到交换机的消息都会被转发到与该交换机绑定的所有队列上
- Fanout交换机
转发消息是最快的,它不会做各种路由匹配 - 图解: