- Type:交换器的类型。
- Durability:(交换器)持久化特性,如果启动此特性,则Broker重启后交换器依然存在,否则交换器会被删除。
- Auto-delete:是否自动删除,如果启用此特性,当最后一个队列解除与交换器的绑定关系,交换器会被删除。
- Arguments:可选参数,一般配合插件或者Broker的特性使用。
之所以存在Durability和Auto-delete特性是因为并发所有的场景和用例都要求交互器是持久化的。
Direct交换器
Direct类型的交换器基于消息路由键(RoutingKey)把消息传递到队列中。Direct交换器是消息单播路由的理想实现(当然,用于多播路由也可以),它的工作原理如下:
- 队列使用路由键K绑定到交换器。
- 当具有路由键R的新消息到达交换器的时候,如果K = R,那么交换器会把消息传递到队列中。
默认交换器
默认交换器(Default Exchange)是一种特殊的Direct交互器,它的名称是空字符串(也就是""),它由消息中间件代理预声明,在RabbitMQ Broker中,它在Web管理界面中的名称是(AMQP default)
。每个新创建的队列都会绑定到默认交换器,路由键就是该队列的队列名,也就是所有的队列都可以通过默认交换器进行消息投递,只需要指定路由键为相应的队列名即可。
Fanout交换器
Fanout其实是一个组合单词,fan也就是扇形,out就是向外发散的意思,Fanout交换器可以想象为"扇形"交换器。Fanout交换器会忽略路由键,它会路由消息到所有绑定到它的队列。也就是说,如果有N个队列绑定到一个Fanout交换器,当一个新的消息发布到该Fanout交换器,那么这条新消息的一个副本会分发到这N个队列中。Fanout交换器是消息广播路由的理想实现。
Topic交换器
Topic交换器基于路由键和绑定队列和交换器的模式进行匹配从而把消息路由到一个或者多个队列。绑定队列和交换器的Topic模式(这个模式串其实就是声明绑定时候的路由键,和消息发布的路由键并非同一个)一般使用点号(dot,也就是’.')分隔,例如source.target.key
,绑定模式支持通配符: