显示Azure Service Bus主题过滤器

时间:2018-03-24 12:50:06

标签: azure azureservicebus azure-servicebus-topics

我正在努力完成使用Azure PaaS的精彩教程,并提出了一个问题。 这是教程,如果它可以帮助其他人(对我来说非常有用) https://youtu.be/ScJ4VxOmNGs

是否有办法编写C#程序来检查服务总线主题订阅规则上设置了哪些过滤器?

我可以这样做:

var rules = await processPaymentInventoryCheckedClient.GetRulesAsync();

以这种方式访问​​它们,但有没有办法使用CLI或Powershell? 我知道截至本文发布之日,您无法在门户网站上进行此操作。

我尝试使用Service Bus Explorer,它显示规则但不显示过滤器: service bus filter missing

SBE非常好btw,非常有用,如果您还没有使用它: https://github.com/paolosalvatori/ServiceBusExplorer

如果我运行上面的C#代码,然后深入查看属性,我可以验证是否确实应用了过滤器:

enter image description here

谢谢 -

1 个答案:

答案 0 :(得分:1)

关于ServiceBus Explorer - 这是一个错误。该工具目前仅显示SqlFilter而非CorrelationFilter。我已经提出issue来添加对CorrelationFilter的支持。

要列出所有过滤器,您可以使用以下LinqPad脚本和free version of the tool

var connectionString = "<asb-connection-string>";
var topicPath = "<topic-path>";
var subName = "<subscription-name>";
var nsm = NamespaceManager.CreateFromConnectionString(connectionString);

foreach (RuleDescription rule in await nsm.GetRulesAsync(topicPath,subName))
{
  if (rule.Filter is SqlFilter)
  {
    $"Rule: Name = {rule.Name} - 
        SqlExpression = {(rule.Filter as SqlFilter).SqlExpression}".Dump();
  }

  if (rule.Filter is CorrelationFilter)
  {
    $"Rule: Name = {rule.Name} - Correlate = {(rule.Filter as
        CorrelationFilter)}".Dump();
  }
}