服务总线主题订阅过滤器

时间:2018-04-04 01:31:52

标签: azureservicebus servicebus azure-servicebus-topics

我正在开发一个将消息发布到服务总线主题的项目。我的主题有两个订阅。有没有办法过滤我的订阅者会收听的消息?

假设这是我的留言文本。

{
"Data" : {
   "Name": "Johnny Cruz"
   "Gender": "Male"
 }
}

我只想收听有男性性别的消息。这是主题中可配置的东西吗?

1 个答案:

答案 0 :(得分:3)

订阅者可以定义他们想要从主题接收哪些消息。你可以参考Topic filters and actions

  

Service Bus支持三种过滤条件:

     
      
  • 布尔过滤器 - TrueFilter和FalseFilter会导致所有到达的消息(true)或没有任何到达的消息(false)被选择用于订阅。

  •   
  • SQL过滤器 - 一个SqlFilter包含一个类似SQL的条件表达式,它在代理中针对到达的消息进行评估。用户定义的属性和系统属性。所有系统属性都必须以sys为前缀。在条件表达式中。过滤条件的SQL语言子集测试是否存在属性(EXISTS),以及空值(IS NULL),逻辑NOT / AND / OR,关系运算符,简单数值算术和简单文本模式匹配等。

  •   
  • 相关过滤器 - CorrelationFilter包含一组条件,这些条件与到达消息的一个或多个用户和系统属性相匹配。常见用法是与CorrelationId属性匹配,但应用程序也可以选择匹配ContentType,Label,MessageId,ReplyTo,ReplyToSessionId,SessionId,To和任何用户定义的属性。当到达的消息的属性值等于相关过滤器中指定的值时,存在匹配。对于字符串表达式,比较区分大小写。指定多个匹配属性时,过滤器将它们组合为逻辑AND条件,这意味着要匹配的过滤器,所有条件必须匹配。

  •   

以下是演示代码:

使用过滤器

创建订阅
var filter=new SqlFilter("(sys.Label='Male');
namespaceManager.CreateSubscription(topicName, subName,filter);

示例消息

var message = new BrokeredMessage(body);
var message.Label = "Male";// or Female