这篇文章主要讲 RabbitMQ 中的交换器。git
咱们不是把消息直接发送到队列里面的,而是先发送到了交换器,交换器再根据路由键把咱们的消息投递到对应的队列。github
每种交换器定义了不一样的路由算法来把消息投递到对应的队列。算法
RabbitMQ 中交换器主要分为四种类型:direct、fanout、topic 以及 headers,headers 用的比较少,就不讲了。spring
路由键全文匹配windows
当你发送一条消息到 direct 交换器时,它会根据路由键全文匹配去寻找绑定到此交换器上的匹配成功的队列,而后投递消息。浏览器
如上图,生产者使用路由键 “fruit.apple” 发送消息到 direct 交换器,交换器会根据绑定信息,全文匹配路由键,因此只有 apple 队列符合。app
忽略路由键spring-boot
当你发送一条消息到 fanout 交换器时,它会把消息投递给全部绑定到此交换器上的队列,并且会忽略路由键。测试
如上图,生产者使用路由键 “fruit.apple” 发送消息到 fanout 交换器,可是交换器会忽略路由键,因此 apple 队列、banana 队列、orange 队列都符合。ui
路由键通配符匹配
当你发送一条消息到 topic 交换器时,它会根据路由键通配符匹配去寻找绑定到此交换器上的匹配成功的队列,而后投递消息。
如上图,生产者使用路由键 “fruit.apple” 发送消息到 topic 交换器,交换器会根据绑定信息,通配符匹配路由键,因此 apple 队列、banana 队列、orange 队列都符合。
先加入运行参数,由于几个交换器配置都在一个项目里面,会致使 Bean 冲突,因此使用 @Profile("direct")
、@Profile("fanout")
、@Profile("topic")
区分了不一样环境下的启用不一样的配置。
--spring.profiles.active=direct
--spring.profiles.active=fanout
--spring.profiles.active=topic
运行项目,而后打开浏览器,输入 http://localhost:9999/sendMessage
RabbitMQ for Windows: Exchange Types
因为本人知识和能力有限,文中若有没说清楚的地方,但愿你们能在评论区指出,以帮助我将博文写得更好。