Azure Service Bus属性筛选器

时间:2014-12-16 00:22:12

标签: c# azure azureservicebus

我正在尝试过滤来自ASB的消息,以便显示具有特定值的特定属性的唯一消息。我不确定这是不可能的,还是我的语法不正确。

以下是我设置过滤器的方法:

var ruleDescriptions = rules as RuleDescription[] ?? rules.ToArray();
var filter = new SqlFilter("PropertyName='PropertyValue'");
if (ruleDescriptions.All(x=>x.Filter != filter))
        {
            _client.AddRule("FilterName", filter);
        }

这种情况下的值是一个字符串。当我运行它时,我会收到具有该属性的所有不同值的事件。

我也尝试了同样的事情,但PropertyValue周围没有单引号但没有成功。如何设置此过滤器?

1 个答案:

答案 0 :(得分:1)

经过进一步研究,我意识到我需要删除默认过滤器:

    if (ruleDescriptions.Any(ruleDescription => ruleDescription.Name == "$Default"))
        {
            _client.RemoveRule("$Default");
        }

如果在同一时间未添加其他规则,则会在创建订阅时添加此默认规则。在这种情况下,我不是我订阅的主题的所有者,并且为我创建了订阅。因此,' $ Default'规则已经添加并收集所有消息。

添加此内容后,上述过滤器按预期工作 - 仅接收基于指定PropertyValue的消息。

来源:http://azure.microsoft.com/en-us/documentation/articles/service-bus-dotnet-how-to-use-topics-subscriptions/