无法使用SqlFilter筛选服务总线主题消息

时间:2018-11-16 04:28:19

标签: azureservicebus servicebus azure-servicebus-topics azure-servicebus-subscriptions

我已经订阅了一个主题,发送者将两个UserProperty设置为“分类”和“子分类”。我想过滤分类设置为1的消息。我尝试添加以下SqlFilter。

  

SqlFilter(“ Classification ='1'”)

它不起作用。无论“分类”属性如何,我仍然会收到所有消息。

我正在使用Microsoft.Azure.ServiceBus命名空间中的订阅客户端。

2 个答案:

答案 0 :(得分:0)

您无需在规则内使用SqlFilter()。只需将其设置为Classification='1'即可过滤邮件。

答案 1 :(得分:0)

尝试以下操作调试: (最初始终会匹配,但随后您就摆脱了

  

OR 1 = 1

在一切正常之后。

RuleDescription rd = new RuleDescription();
rd.Filter = new SqlFilter("CustomProperty = '1' OR 1=1");

然后您可以根据需要调整语法糖。

https://docs.microsoft.com/en-us/dotnet/api/microsoft.servicebus.messaging.sqlfilter?view=azure-dotnet

您应显示有关如何创建订阅的代码。下面是一些代码..作为示例:

NamespaceManager nsm = /* outside of scope of this question */
SubscriptionDescription currentSubscriptionDescription = new SubscriptionDescription("MyTopicPath", "MySubscriptionName");
currentSubscriptionDescription.AutoDeleteOnIdle = false;
SubscriptionDescription postCreateSd = nsm.CreateSubscription(currentSubscriptionDescription);


/* now tweak it */
MessagingFactory mf = /* outside of scope of this question */
SubscriptionClient subClient = mf.CreateSubscriptionClient("MyTopicPath", "MySubscriptionName");
RuleDescription rd = new RuleDescription();
rd.Filter = new SqlFilter("CustomProperty = '1' OR 1=1");
subClient.AddRule(rd);