我正在开发一个将消息发布到服务总线主题的项目。我的主题有两个订阅。有没有办法过滤我的订阅者会收听的消息?
假设这是我的留言文本。
{
"Data" : {
"Name": "Johnny Cruz"
"Gender": "Male"
}
}
我只想收听有男性性别的消息。这是主题中可配置的东西吗?
答案 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