1、简介

  前面学习了有选择性的接收消息,但是却没有办法基于多个标准来接收消息。为了实现这个目的,接下来我们学习如何使用另一种更复杂的交换机 —— 主题交换机。

2、主题交换机

  发送到主题交换机(topic exchange)的消息不可以携带随意什么样子的路由键(routing_key),它的路由键必须是一个由.分隔开的词语列表。这些单词随便是什么都可以,但是最好是跟携带它们的消息有关系的词汇。以下是几个推荐的例子:"stock.usd.nyse", "nyse.vmw", "quick.orange.rabbit"。词语的个数可以随意,但是不要超过255字节。绑定键也必须拥有同样的格式。

  主题交换机背后的逻辑跟直连交换机很相似 —— 一个携带着特定路由键的消息会被主题交换机投递给绑定键与之想匹配的队列。但是它的绑定键和路由键有两个特殊应用方式:

  (1)* (星号) 用来表示一个单词

  (2)# (井号) 用来表示任意数量(零个或多个)单词。

  主题交换机示例:

  

  这个例子里,发送的消息所携带的路由键是由三个单词所组成的,这三个单词被两个.分割开。一个携带有 quick.orange.rabbit 的消息将会被分别投递给这两个队列。携带着 lazy.orange.elephant 的消息同样也会给两个队列都投递过去。另一方面携带有 quick.orange.fox 的消息会投递给第一个队列,携带有 lazy.brown.fox 的消息会投递给第二个队列。携带有 lazy.pink.rabbit 的消息只会被投递给第二个队列一次,即使它同时匹配第二个队列的两个绑定。携带着 quick.brown.fox 的消息不会投递给任何一个队列。

  如果我们违反约定,发送了一个携带有一个单词或者四个单词("orange" or "quick.orange.male.rabbit")的消息时,发送的消息不会投递给任何一个队列,而且会丢失掉。但是另一方面,即使 "lazy.orange.male.rabbit" 有四个单词,他还是会匹配最后一个绑定,并且被投递到第二个队列中。

3、消息发送和接收

  主题交换机的消息发送和接收写法和路由交换机一致,只需要将类型换成主题交换机:

channel.exchangeDeclare(exchangeName, BuiltinExchangeType.TOPIC);

  然后,路由键的规则满足主题交换机的规则即可。

最新文章

  1. C# 匿名对象随笔
  2. python 生产者消费者模型
  3. 3D碰撞检测
  4. K均值聚类(Kmeans)
  5. 【c实现,vc6调试通过】给出一字符串指针,计算出字符串指针中单词数
  6. qt实现类似QQ伸缩窗口--鼠标事件应用
  7. (转)HTML特殊字符
  8. NMAP扫描UDP123NTP端口详解
  9. Python修改文件名
  10. Step by Step 真正从零开始,TensorFlow详细安装入门图文教程!帮你完成那个最难的从0到1
  11. React组件和生命周期简介
  12. priority_queue的用法
  13. JVM参数配置 java内存区域
  14. C# 备份、还原、拷贝远程文件夹
  15. redis参数改进建议
  16. MySQL的order by时区分大小写
  17. 在SqlServer 中解析JSON数据 [parseJSON] 函数 数据库中 解析JSON
  18. LINUX-iostat命令讲解
  19. dat.gui.js
  20. 深入了解Java虚拟机(3-1)虚拟机类加载机制

热门文章

  1. JavaScript之几种创建函数的区别以及优缺点。
  2. [转]oracle 数据库、表空间、实例、服务之间的关系
  3. s3c2440对nandflash的操作
  4. 微软浏览器兼容工具modern.IE
  5. OpenShift helm的安装
  6. IOS开发错误
  7. python staticmethod,classmethod方法的使用和区别以及property装饰器的作用
  8. linux 调度总结(转载)
  9. minic 符号表
  10. MyEclipse8.0 注册码生成代码