【问题标题】:Azure Service Bus - Message Peek on SubscriptionAzure 服务总线 - 订阅消息一览
【发布时间】:2018-09-14 15:25:39
【问题描述】:

我对 Azure 服务总线的主题/订阅具有侦听权限。有没有办法验证订阅是否有消息以及有多少消息。我没有管理连接字符串,我认为我无法运行服务总线资源管理器。我不打算从订阅中读取消息。

【问题讨论】:

    标签: azure azureservicebus azure-servicebus-topics service-bus-explorer


    【解决方案1】:

    主题订阅中的消息计数只能使用管理连接字符串检索。使用 Listen Connection 字符串,您无法读取消息的属性或计数。

    但是,您可以使用 Listen Connection 字符串查看订阅中的消息。查看消息不会锁定或删除订阅中的消息。您可以根据需要多次查看消息。

    因此,在 Listen Connection 字符串的帮助下,您可以通过在 while 循环内逐一查看消息并在循环内添加 counter 来找到订阅中的消息数。计数器值是订阅中的消息数。

    【讨论】:

      【解决方案2】:

      我不打算从订阅中读取消息。

      简短的回答是。获取主题或订阅消息信息需要管理访问权限。

      如果您想获取订阅消息数,可以尝试以下两种方式:

      1.您有管理访问权限,您可以使用以下演示代码来执行此操作。

      var topicName = "topic1";
      var subscriptionName = "subscription";
      var address = "sb://xxx.servicebus.windows.net/"; //base address of namespace you are connecting to.
      MessagingFactorySettings MsgFactorySettings = new MessagingFactorySettings
       {
           TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("SharedAccessKeyName", "xxxxxx"),
       };
      MessagingFactory msgFactory = MessagingFactory.Create(address, MsgFactorySettings);
      NamespaceManager manager = new NamespaceManager(msgFactory.Address,msgFactory.GetSettings().TokenProvider);
      var subscriptioncDescription = manager.GetSubscription(topicName, subscriptionName);
      var count = subscriptioncDescription.MessageCountDetails.ActiveMessageCount;
      

      2.使用 Azure Microsoft.Azure.Management.ServiceBus.Fluent sdk。您需要注册 Azure AD 应用程序并为其分配相应的角色。更多信息请参考另一个SO thread

       var subscriptionId = "Azure subscriptionId";
       var resourceGroupName = "rgName";
       var nameSpace = "tomtestsb";
       var topicName = "topic1";
       var subscriptionName = "subscription";
       var credentials = SdkContext.AzureCredentialsFactory.FromFile(@"D:\Tom\Documents\azureCred.txt");
       var client = new ServiceBusManagementClient(credentials);
       client.SubscriptionId = subscriptionId;
       var topic = client.Topics.GetAsync(resourceGroupName, nameSpace, topicName).Result;
       var topicMessagecount = topic.CountDetails.ActiveMessageCount;
       var subscription = client.Subscriptions.GetAsync(resourceGroupName, nameSpace, topicName, subscriptionName).Result;
       var subscriptionMessagecount = subscription.CountDetails.ActiveMessageCount;
      

      【讨论】:

        猜你喜欢
        • 2020-07-06
        • 2019-02-12
        • 1970-01-01
        • 1970-01-01
        • 2020-03-28
        • 2019-02-17
        • 2014-02-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多