RabbitMQ具有非常酷的功能,基于主题的路由,允许订阅者基于多个标准过滤消息。 主题是与邮件一起发布的点分隔的单词列表。 例子是“stock.usd.nyse”或“book.uk.london”或“a.b.c”,这些单词可以是你喜欢的任何东西,但通常是消息的一些属性。 主题字符串的限制为255个字符。

要使用主题发布,只需使用带有主题的重载的Publish方法:

bus.Publish(message, "X.A");

订阅者可以通过指定要匹配的主题来过滤邮件。 这些可以包括通配符:

*:匹配一个字。

#:匹配到零个或多个单词。

所以发布的主题为“X.A.2”的消息将匹配“#”,“X.#”,“* .A.*”,而不是“X.B. *”或“A”。 要订阅一个主题,请使用重载的订阅方法与配置:

bus.Subscribe("my_id", handler, x => x.WithTopic("X.*"));

警告: 具有相同订阅者但不同主题字符串的两个单独订阅可能不会产生您期望的效果。 subscriberId有效地标识个体AMQP队列。 具有相同subscriptionId的两个订阅者将连接到相同的队列,并且两者都将添加自己的主题绑定。 所以,例如,如果你这样做:

bus.Subscribe("my_id", handlerOfXDotStar, x => x.WithTopic("X.*"));
bus.Subscribe("my_id", handlerOfStarDotB, x => x.WithTopic("*.B"));

匹配“x.*”或“* .B”的所有消息将被传递到“XXX_my_id”队列。 然后,RabbitMQ将向两个消费者传递消息,其中handlerOfXDotStar和handlerOfStarDotB轮流获取每条消息。

现在,如果你想要匹配多个主题(“X. *”OR“* .B”),你可以使用另一个重载的订阅方法,它采用多个主题,如下所示:

bus.Subscribe("my_id", handler, x => x.WithTopic("X.*").WithTopic("*.B"));

有一些主题重载的SubscribeAsync方法的工作方式完全相同。

最新文章

  1. django 其他地址访问不了问题
  2. 关于JavaScript 中的变量
  3. 程序员必备的代码审查(Code Review)清单【转载】
  4. HDU 1213 How Many Tables(并查集,简单)
  5. [ActionScript 3.0] AS3.0 生成xml方法之一
  6. PowerDesigner反向生成Mysql数据原型
  7. Java bit、byte、位、字节、汉字、字符
  8. c语言单链表,冒泡排序
  9. SpringMVC经典系列-12基于SpringMVC的文件上传---【LinusZhu】
  10. centos redis 安装
  11. jQuery插件placeholder的使用方法
  12. Java Web(十三) 使用javamail进行发送邮件,(使用QQ,163,新浪邮箱服务器)
  13. SQL列子 转载
  14. docker镜像的常用操作
  15. Django学习笔记(进阶篇)
  16. win32-api: 让 static 控件中的水平横行,垂直居中。
  17. 关于nodejs访问mysql的思考
  18. Ubuntu中的在文件中查找和替换命令
  19. Linux 文件系统介绍
  20. MT【150】源自斐波那契数列

热门文章

  1. touchmover 手机端拖动方法
  2. H5在线编辑器优化总结
  3. C# selecd,new,virtual,abstract与override
  4. PeopleCode事件和方法只用于online界面不能用于组件接口(component interface)
  5. 利用libcurl进行post
  6. python的高级应用
  7. 访问Access日期字段
  8. Struts2框架05 result标签的类型
  9. eclipse 修改中英文显示
  10. 设置TrackMouseEvent捕获WM_MOUSEHOVER和WM_MOUSELEAVE消息