【问题标题】:SQLFilter based on System Properties in Azure Service Bus SubscriptionSQLFilter 基于 Azure 服务总线订阅中的系统属性
【发布时间】:2017-01-09 23:26:23
【问题描述】:

我正在设置主题/订阅服务,需要有关我的 SQLFilter 语法的帮助,以便我可以访问 BrokeredMessage 属性,特别是 To 属性。访问消息的系统属性的 SQL 过滤器的正确语法是什么?

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

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

如果我设置自定义属性,例如商店名称,如下所示:

message.Properties.Add("StoreName", "TestMe");

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

namespaceManager.CreateSubscription("MyNSTestTopic", "TestSubscription", new SqlFilter("StoreName = 'TestMe'"));

订阅按预期过滤。但是,如果我尝试使用文章中描述的 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'"));

【问题讨论】:

    标签: c# azure azureservicebus azure-servicebus-topics


    【解决方案1】:

    来自这篇文章Topic Subscription Filters

    SQL 过滤器 - SqlFilter 包含一个 SQL-like condition expression,它在代理中根据到达消息的用户定义属性和系统属性进行评估。 所有系统属性(在BrokeredMessage class 中明确列出的所有属性)都必须在条件表达式中以sys. 为前缀。 SQL 子集实现了属性是否存在测试 (EXISTS)、空值测试 (IS NULL)、逻辑NOT/AND/OR、关系运算符、数值算术和简单文本模式匹配LIKE

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

    namespaceManager.CreateSubscription("MyNSTestTopic", "TestSubscription",
        new SqlFilter("sys.To = 'TestMe'"));
    

    【讨论】:

    • 感谢 Thomas 的链接,使用 sys.To 效果很好。
    • 不幸的是,天蓝色的文档在 sql 过滤器文档中留下了这个重要的注释。谢谢。
    • 如何在过滤器中表达用户定义的属性?
    • @JimAho,你的意思是sys.To = MyCustomPropertyMyCustomProperty = 'TestMe'
    • 是的,这个:MyCustomProperty = 'TestMe'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 2017-11-23
    • 2017-10-23
    相关资源
    最近更新 更多