我正在尝试为Azure Service Bus中的订阅客户端筛选消息。我想检查该属性是否不存在或该属性是否具有特定值。这是我添加过滤器的方式:
var rules = await subscriptionClient_.GetRulesAsync();
if (!rules.Any(r => r.Name == "FilteringRule"))
{
var filter = new SqlFilter($"sys.CustomProperty='{CustomValue}' OR sys.CustomProperty IS NULL");
await subscriptionClient_.AddRuleAsync("FilteringRule", filter);
}
并将相同的值传递给Microsoft.Azure.ServiceBus.Message对象:
Message msg = new Message();
msg.UserProperties.Add("CustomProperty", "CustomValue");
在Service Bus资源管理器中进行检查会显示该消息确实具有该属性。
我正在尝试找出如何以编程方式而不是通过ARM模板过滤订阅。
答案 0 :(得分:1)
由于您试图将custom properties
视为system properties
而导致过滤器无法工作的原因。请尝试将您的过滤器表达式更改为:
var filter = new SqlFilter($"CustomProperty='{CustomValue}' OR CustomProperty IS NULL");
,一切都会正常进行。请注意,我已从您的过滤器表达式中删除了sys.
前缀。