RabbitMQ有一个很酷的功能,基于主题的路由,这个功能允许订阅者基于多个条件去过滤消息。一个主题是由点号分隔的单词列表,随消息一同发布。例如:“stock.usd.nyse” 或 "book.uk.london" 或 "a.b.c",这些可以是任何你喜欢的单词,但通常是一些消息的属性。主题字符串限制最多255个字符。

去发布一个主题,简单的通过使用带主题参数的Publish重载方法"

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

订阅者能通过指定一个主题去匹配来过滤消息。这些可以包含通配符。

  • *(星号)只能匹配一个词。
  • (井号)能匹配0到多个词。

这样一个消息被发布带有一个“X.A.2”的主题,将匹配“#”,“X.#”, ".A.", 但是不能匹配“X.B”或“A”。去订阅一个主题,使用带配置的SubScribe重载方法。

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

警告:带有相同subscriberId的两个独立订阅,但用了不同主题字符串,可能不会有你预期的效果。一个subscriberId实际上是去识别一个独立的AMQP队列。带有相同subscriberId的两个订阅者将同时连接到同一个队列,同时将添加他们自己主题Binding。例如,假如你这样做:

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方法之前,必须要打开publish管道。

英文地址:https://github.com/EasyNetQ/EasyNetQ/wiki/Topic-Based-Routing

本文地址:http://www.cnblogs.com/HuangLiang/p/EasyNetQ_Topic_Based_Routing.html

9-EasyNetQ之基于主题的路由的更多相关文章

  1. EasyNetQ使用(五)【基于主题的路由,控制队列名称】

    RabbitMQ有一个很酷的功能,基于主题的路由,这个功能允许订阅者基于多个条件去过滤消息.一个主题是由点号分隔的单词列表,随消息一同发布.例如:“stock.usd.nyse” 或 “book.uk ...

  2. 【EasyNetQ】- 基于topic的路由

    RabbitMQ具有非常酷的功能,基于主题的路由,允许订户根据多个标准过滤消息.主题是由与消息一起发布的点分隔的单词列表.例如,“stock.usd.nyse”或“book.uk.london”或“a ...

  3. 使用PowerApps快速构建基于主题的轻业务应用 —— 入门篇

    作者:陈希章 发表于 2017年12月12日 前言 在上一篇文章 基于Office 365的随需应变业务应用平台 中我提到,随着随需应变的业务需要,以及技术的发展,业务应用的开发的模式也有了深刻的变化 ...

  4. 使用PowerApps快速构建基于主题的轻业务应用 —— 进阶篇

    作者:陈希章 发表于 2017年12月14日 在上一篇 使用PowerApps快速构建基于主题的轻业务应用 -- 入门篇 中,我用了三个实际的例子演示了如何快速开始使用PowerApps构建轻业务应用 ...

  5. Asp.net MVC 基于Area的路由映射

    对于一个较大规模的Web应用,我们可以从功能上通过Area将其划分为较小的单元.每个Area相当于一个独立的子系统,具有一套包含Models.Views和Controller在内的目录结构和配置文件. ...

  6. 跟我学SpringCloud | 第十七篇:服务网关Zuul基于Apollo动态路由

    目录 SpringCloud系列教程 | 第十七篇:服务网关Zuul基于Apollo动态路由 Apollo概述 Apollo相比于Spring Cloud Config优势 工程实战 示例代码 Spr ...

  7. Azure Traffic Manager(二) 基于权重与基于优先级的路由策略为我们的Web项目提供负载均衡

    一,引言 上一片文章我们使用 Azure Traffic Manager 分发用户请求,同时演示了两种路由策略,“Performance”,“Geographic”的两种方式,今天我们继续讲解 Tra ...

  8. 基于SNMP的路由拓扑发现算法收集

    一.三层(网络层)发现 算法来源:王娟娟.基于SNMP的网络拓扑发现算法研究.武汉科技大学硕士学位论文,2008 数据结构: 待检路由设备网关链表:存放指定深度内待检路由设备的网关信息,处理后删除. ...

  9. 品尝阿里云容器服务:用nginx镜像创建容器,体验基于域名的路由机制

    在前一篇博文中我们了解了阿里云容器服务的路由机制: 请求 -> 负载均衡80端口 -> 容器主机9080端口 -> acsrouting路由容器80端口 --基于域名--> W ...

随机推荐

  1. js判断是pc还是移动端

    //判断pc还是移动端 var isM = function () { var ua = navigator.userAgent; /* navigator.userAgent 浏览器发送的用户代理标 ...

  2. 5.3 Razor语法基础

    以往开发ASP.NET Web Form时,在ASPX页面上都会出现许多夹杂C#/VB.NET与HTML的情况,而先前使用<%...%>这种传统圆角括号的表示法会让HTML标签与ASP.N ...

  3. String随笔

    1.古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报:,请编写一个程序,使用上述算法加密或解密用户输入的英文字串要求设计思想.程序流程图.源代码.结果截图. 设计思想:1)定义一个String类型 ...

  4. 中文译文:Minerva-一种可扩展的高效的深度学习训练平台(Minerva - A Scalable and Highly Efficient Training Platform for Deep Learning)

    Minerva:一个可扩展的高效的深度学习训练平台 zoerywzhou@gmail.com http://www.cnblogs.com/swje/ 作者:Zhouwan  2015-12-1 声明 ...

  5. LeetCode OJ:Validate Binary Search Tree(合法的二叉搜索树)

    Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...

  6. LeetCode OJ:Minimum Size Subarray Sum(最小子数组的和)

    Given an array of n positive integers and a positive integer s, find the minimal length of a subarra ...

  7. 剑指offer--8.调整数组顺序使奇数位于偶数前面

    习惯了简单 ------------------------------------------------- 时间限制:1秒 空间限制:32768K 热度指数:422906 本题知识点: 数组 题目 ...

  8. 远程激活.NET REFLECTOR(不能断网)

    由于是远程连接的服务器,使用.Net Reflector注册机激活时,不能断网. 如何禁止Reflector连接她的激活服务器,可进行如下操作: 1.添加hosts: 0.0.0.0 red-gate ...

  9. linux命令学习笔记(28):tar命令

    通过SSH访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar命令就是是必不可少的一个功能强大的 工具.linux中最流行的tar是麻雀虽小,五脏俱全,功能强大. tar命令可以为linu ...

  10. POJ2985 The k-th Largest Group (并查集+treap)

    Newman likes playing with cats. He possesses lots of cats in his home. Because the number of cats is ...