【EasyNetQ】- 基于topic的路由
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之前打开发布频道。
最新文章
- 【NLP】Tika 文本预处理:抽取各种格式文件内容
- js事件技巧方法整合
- HTML <;b>;、 <;strong>; 、<;big>;、<;small>;、<;em>;、<;i>;、<;sub>;和<;sup>; 标签
- 【面经】【转】C++类型转换
- CentOS7 登陆密码遗忘和修改
- eclipse远程调试Tomcat方法
- 【python cookbook】【字符串与文本】3.利用shell通配符做字符串匹配
- 【转】由DFT推导出DCT
- Hibernate 配置详解(11)
- jQuery照片伸缩效应,这不是一个简单的图像缩放,它不影响其它元素的布局
- .net core 部署 centos7 初试
- 天地图使用过程中由于display:none导致加载部分地图瓦片失败
- PL/SQL 游标 (实验七)
- BZOJ_1485_[HNOI2009]有趣的数列_卡特兰数
- Main Steps to Setup an ODI data sync
- mk文件配置第三方jar包,so文件
- shell脚本一键安装redis
- ESB架构之企业实施案例
- R read.table函数的check.names参数
- 设置placeholder的字体颜色
热门文章
- C#提取html中的汉字
- mybatis自动生成@Table、@Column、@Id注解
- poj_2773_Happy 2006
- Flask-SQLAlchemy安装及设置
- 【原创】展开二层嵌套列表(或pd.Series)的几种方法效率对比
- Asp.Net Core 使用Docker进行容器化部署(二)使用Nginx进行反向代理
- 13.4.3 鼠标与滚轮事件【JavaScript高级程序设计第三版】
- Pig关系型运算符例子
- python mac下安装虚拟环境
- array_x