SQLFilter基于Azure Service Bus订阅中的系统属性

Sam*_*lis 4 c# azure azureservicebus azure-servicebus-topics

我正在设置主题/订阅服务,需要帮助我的SQLFilter语法,以便我可以访问BrokeredMessage属性,特别是To属性.SQL筛选器访问邮件系统属性的正确语法是什么?

我有一个使用本教程的工作示例,我可以根据需要发送和接收我的主题/订阅:https://azure.microsoft.com/en-us/documentation/articles/service-bus-queues-topics-subscriptions/

但是,现在我想根据BrokeredMessage的To属性为每个订阅设置SQL过滤器.我所遵循的教程提到可以"创建订阅时,您可以提供对消息属性进行操作的过滤器表达式,包括系统属性(例如,Label)和自定义应用程序属性(例如,StoreName) .)"

如果我设置自定义属性,例如StoreName,如下所示:

message.Properties.Add("StoreName", "TestMe");
Run Code Online (Sandbox Code Playgroud)

并使用SQL过滤器设置订阅,如下所示:

namespaceManager.CreateSubscription("MyNSTestTopic", "TestSubscription", new SqlFilter("StoreName = 'TestMe'"));
Run Code Online (Sandbox Code Playgroud)

订阅按预期过滤.但是,如果我尝试使用文章中描述的BrokeredMessage对象To属性(或标签),我一直无法使其工作.我尝试了以下SQL过滤器没有运气.访问消息的系统属性的正确语法是什么?

BrokeredMessage message = new BrokeredMessage();
message.To = "TestMe";

namespaceManager.CreateSubscription("MyNSTestTopic", "TestSubscription", new SqlFilter("To = 'TestMe'"));
namespaceManager.CreateSubscription("MyNSTestTopic", "TestSubscription", new SqlFilter("Message.To= 'TestMe'"));
namespaceManager.CreateSubscription("MyNSTestTopic", "TestSubscription", new SqlFilter("MessageTo= 'TestMe'"));
namespaceManager.CreateSubscription("MyNSTestTopic", "TestSubscription", new SqlFilter("messageto= 'TestMe'"));
Run Code Online (Sandbox Code Playgroud)

Tho*_*mas 11

从本文主题订阅过滤器:

SQL过滤器 - A SqlFilter包含类似SQL的条件表达式,该表达式在代理中根据到达消息的用户定义属性和系统属性进行评估.所有系统属性(BrokeredMessage类中显式列出的所有属性)都必须sys.在条件表达式中作为前缀.SQL子集实现对properties(EXISTS)的存在的测试,测试null-values(IS NULL),逻辑NOT/ AND/ OR,关系运算符,数值运算和与之匹配的简单文本模式LIKE.

因此,在您的情况下,您需要SqlFilter在sys.To属性上创建一个:

namespaceManager.CreateSubscription("MyNSTestTopic", "TestSubscription",
    new SqlFilter("sys.To = 'TestMe'"));
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,Azure文档将重要提示留在了SQL筛选器文档之外。谢谢。 (2认同)