RabbitMQ具有非常酷的功能,基于主题的路由,允许订户根据多个标准过滤消息。主题是由与消息一起发布的点分隔的单词列表。例如,“stock.usd.nyse”或“book.uk.london”或“abc”,这些单词可以是您喜欢的任何内容,但通常是该消息的某些属性。主题字符串的长度限制为255个字符。

要使用主题发布,只需将重载的Publish方法与主题一起使用:

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

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

*(星号)恰好匹配一个单词。

#(hash)匹配零个或多个单词。

因此,以“XA2”主题发布的消息将匹配“#”,“X。#”,“* .A。*”但不匹配“XB *”或“A”。要订阅主题,请使用重载的Subscribe方法和配置:

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

一个警告。具有相同subscriberId但不同主题字符串的两个单独订阅可能不会产生您期望的效果。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. *”或“* .B”),你可以使用带有多个主题的Subscribe方法的另一个重载,如下所示:

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

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

有关主题的更多警示故事,请参阅此博客帖子Topic Confusion,但请注意该示例使用旧版本的API,您必须在调用Publish之前打开发布频道。

最新文章

  1. 【NLP】Tika 文本预处理:抽取各种格式文件内容
  2. js事件技巧方法整合
  3. HTML <b>、 <strong> 、<big>、<small>、<em>、<i>、<sub>和<sup> 标签
  4. 【面经】【转】C++类型转换
  5. CentOS7 登陆密码遗忘和修改
  6. eclipse远程调试Tomcat方法
  7. 【python cookbook】【字符串与文本】3.利用shell通配符做字符串匹配
  8. 【转】由DFT推导出DCT
  9. Hibernate 配置详解(11)
  10. jQuery照片伸缩效应,这不是一个简单的图像缩放,它不影响其它元素的布局
  11. .net core 部署 centos7 初试
  12. 天地图使用过程中由于display:none导致加载部分地图瓦片失败
  13. PL/SQL 游标 (实验七)
  14. BZOJ_1485_[HNOI2009]有趣的数列_卡特兰数
  15. Main Steps to Setup an ODI data sync
  16. mk文件配置第三方jar包,so文件
  17. shell脚本一键安装redis
  18. ESB架构之企业实施案例
  19. R read.table函数的check.names参数
  20. 设置placeholder的字体颜色

热门文章

  1. C#提取html中的汉字
  2. mybatis自动生成@Table、@Column、@Id注解
  3. poj_2773_Happy 2006
  4. Flask-SQLAlchemy安装及设置
  5. 【原创】展开二层嵌套列表(或pd.Series)的几种方法效率对比
  6. Asp.Net Core 使用Docker进行容器化部署(二)使用Nginx进行反向代理
  7. 13.4.3 鼠标与滚轮事件【JavaScript高级程序设计第三版】
  8. Pig关系型运算符例子
  9. python mac下安装虚拟环境
  10. array_x