RabbitMQ 实战(三)RabbitMQ 中的交换器

这篇文章主要讲 RabbitMQ 中的交换器。git

咱们不是把消息直接发送到队列里面的,而是先发送到了交换器,交换器再根据路由键把咱们的消息投递到对应的队列。github

交换器的类型

每种交换器定义了不一样的路由算法来把消息投递到对应的队列。算法

RabbitMQ 中交换器主要分为四种类型:direct、fanout、topic 以及 headers,headers 用的比较少,就不讲了。spring

direct

路由键全文匹配windows

当你发送一条消息到 direct 交换器时,它会根据路由键全文匹配去寻找绑定到此交换器上的匹配成功的队列,而后投递消息。浏览器

如上图,生产者使用路由键 “fruit.apple” 发送消息到 direct 交换器,交换器会根据绑定信息,全文匹配路由键,因此只有 apple 队列符合。app

fanout

忽略路由键spring-boot

当你发送一条消息到 fanout 交换器时,它会把消息投递给全部绑定到此交换器上的队列,并且会忽略路由键测试

如上图,生产者使用路由键 “fruit.apple” 发送消息到 fanout 交换器,可是交换器会忽略路由键,因此 apple 队列、banana 队列、orange 队列都符合。ui

topic

路由键通配符匹配

当你发送一条消息到 topic 交换器时,它会根据路由键通配符匹配去寻找绑定到此交换器上的匹配成功的队列,而后投递消息。

如上图,生产者使用路由键 “fruit.apple” 发送消息到 topic 交换器,交换器会根据绑定信息,通配符匹配路由键,因此 apple 队列、banana 队列、orange 队列都符合。

  • 能够使用操做符 “#” 配置全部的规则。
  • “*” 操做符将 “.” 视为分割符。
  • “#” 操做符没有分块的概念,它将任意 “.” 字符均视为关键字的匹配部分。

运行项目

先加入运行参数,由于几个交换器配置都在一个项目里面,会致使 Bean 冲突,因此使用 @Profile("direct")@Profile("fanout")@Profile("topic") 区分了不一样环境下的启用不一样的配置。

  • 测试 direct 交换器:--spring.profiles.active=direct
  • 测试 fanout 交换器:--spring.profiles.active=fanout
  • 测试 topic 交换器:--spring.profiles.active=topic

运行项目,而后打开浏览器,输入 http://localhost:9999/sendMessage

测试 direct 交换器

测试 fanout 交换器

测试 topic 交换器

源码地址

参考资料

RabbitMQ for Windows: Exchange Types

结语

因为本人知识和能力有限,文中若有没说清楚的地方,但愿你们能在评论区指出,以帮助我将博文写得更好。

相关文章
相关标签/搜索