代码之家  ›  专栏  ›  技术社区  ›  Joe Ruder

显示Azure服务总线主题筛选器

  •  0
  • Joe Ruder  · 技术社区  · 8 年前

    我正在学习一个关于使用Azure PaaS的优秀教程,并提出了一个问题。 这里是教程,如果它对其他人有帮助的话(对我来说非常有用) https://youtu.be/ScJ4VxOmNGs

    除了编写C#程序外,还有什么方法可以检查Service Bus主题订阅规则上设置了哪些筛选器?

    我可以这样做:

    var rules = await processPaymentInventoryCheckedClient.GetRulesAsync();
    

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

    我尝试使用Service Bus Explorer,它显示了规则,但没有显示筛选器: service bus filter missing

    顺便说一句,SBE非常棒,如果您没有使用过它,它会非常有用: https://github.com/paolosalvatori/ServiceBusExplorer

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

    enter image description here

    谢谢你--

    1 回复  |  直到 8 年前
        1
  •  1
  •   Sean Feldman    8 年前

    关于ServiceBus Explorer,这是一个bug。该工具当前仅显示 SqlFilter s和not CorrelationFilter s、 我提出了一个 issue 添加对的支持 相关过滤器 s

    要列出所有筛选器,可以使用以下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();
      }
    }