代码之家  ›  专栏  ›  技术社区  ›  Thomas Schreiter

从SubscriptionClient获取消息计数

  •  0
  • Thomas Schreiter  · 技术社区  · 7 年前

    examples 我发现使用 NamespaceManager ,但这对我来说似乎有点多余,因为我已经有了一个 SubscriptionClient SubscriptionDescription

    Fwiw,我尝试通过名称空间管理器使用迂回,但我得到一个它抛出了一个401未经授权的错误:

    int GetMessageCount(SubscriptionClient client) {
        NameSpaceManager nsm = new NamespaceManager(client.MessagingFactory.NamespaceEndpoints.First());
        SubscriptionDescription desc = nsm.GetSubscription(client.TopicPath, client.Name); // <-- throws error
        long numMsg = desc.MessageCount;
        return numMsg;
    }
    
    3 回复  |  直到 7 年前
        1
  •  1
  •   Fei Han    7 年前

    有没有办法直接从客户端转到SubscriptionDescription?

    根据 SubscriptionClient Class ,它不提供从给定SubscriptionClient对象获取消息计数的直接方法。

    它抛出401未经授权的错误

    client.MessagingFactory.NamespaceEndpoints.First() 返回命名空间终结点,初始化 微软服务总线。命名空间管理器 使用该服务命名空间URI基址初始化,但您没有指定授权您执行操作的凭据,因此执行时返回401错误 行动以下代码对我来说很好,你可以试试。

    NamespaceManager nsm = new NamespaceManager(client.MessagingFactory.NamespaceEndpoints.First(), TokenProvider.CreateSharedAccessSignatureTokenProvider("{keyName}", "{SharedAccessKey}"));
    
    var subscriptionDesc = nsm.GetSubscription(topicName, subscriptionName);
    
    long messageCount = subscriptionDesc.MessageCount;
    
        2
  •  1
  •   Sean Feldman    7 年前

    你正在构建你的 NamespaceManager 数据不正确。

    client.MessagingFactory.NamespaceEndpoints.First()
    

    URI ,而不是所需的连接字符串。

    有没有办法直接从客户端转到SubscriptionDescription?

    命名空间管理器

        3
  •  0
  •   psfinaki    5 年前

    截至目前(2019年11月),仍无法通过 SubscriptionClient .

    然而,人们在这个话题上提供了解决方法,所以这里是另一个通过 ManagementClient

    public async static Task<long> GetSubscriptionMessageCountAsync(
        ManagementClient client,
        SubscriptionDescription subscription)
    {
        var runtimeInfo = await client.GetSubscriptionRuntimeInfoAsync(
            subscription.TopicPath,
            subscription.SubscriptionName);
    
        return runtimeInfo.MessageCount;
    }