列出ServiceBus命名空间中的所有Azure servicebus订阅

时间:2018-04-03 08:55:09

标签: azure azureservicebus

我正在将我的项目从WindowsAzure.ServiceBus迁移到新的Microsoft.Azure.Servicebus NuGet包。

问题是我无法找到在servicebus命名空间中列出所有当前主题/订阅的方法。

这是我之前用过的旧NuGet包的代码片段:

var namespaceManager = NamespaceManager.CreateFromConnectionString("ServiceBusConnectionString");

foreach (var topic in await namespaceManager.GetTopicsAsync())
{
    foreach (var subscription in await namespaceManager.GetSubscriptionsAsync(topic.Path))
    {
        //do something
    }
}
foreach (var queue in await namespaceManager.GetQueuesAsync())
{
    //do something
}

编辑:最新版本支持列出所有主题,订阅和队列。

var managementClient = new ManagementClient("ServiceBusConnectionString");

foreach (var topic in await _managementClient.GetTopicsAsync())
{
    foreach (var subscription in await _managementClient.GetSubscriptionsAsync(topic.Path))
    {
        //do something
    }
}

1 个答案:

答案 0 :(得分:1)

Microsoft.Azure.Servicebus这是专注于queues & topics的下一代Service Bus .NET客户端库。您可以从github获取有关Microsoft.Azure.Servicebus的更多信息。

如果您需要管理操作,新客户将不会提供。我建议你最好使用Management库或等到NamespaceManager的替换包没出来。

如果可以使用管理库,则使用以下命令 用于列出订阅的演示代码。有关如何使用管理库的更多详细信息,您可以引用另一个SO thread

var credentials = SdkContext.AzureCredentialsFactory.FromFile(@"authpath");
var azure = Azure
            .Configure()
            .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
            .Authenticate(credentials)
            .WithDefaultSubscription();
var sbNameSpace = "service bus subscription";
var resoureGroup = "resourcegroup";
var topicName = "topicName"
var servicebus = azure.ServiceBusNamespaces.GetByResourceGroup(resoureGroup, sbNameSpace);
var topic = servicebus.Topics.GetByName(topicName);
var subscription = topic.Subscriptions.List();