获取对 Azure 存储帐户中所有队列的访问权限

Get access to all queues in Azure Storage Account

我正在按照 Microsoft 文档上的建议使用 Azure.Storage.Queues 包。我正在使用 Queue Client 连接到队列,如下所示,

public class QueueClientSingleton : IQueueClientSingleton
{
    private readonly Lazy<QueueClient> _queueClientXyz;
    private readonly IConfiguration _configuration;

    public QueueClientSingleton(IConfiguration configuration)
    {
        _configuration = configuration;

        _queueClientXyz = new Lazy<QueueClient>(() => new QueueClient(_configuration.ConnectionString, "QueueXyz");
    }
}

以上代码未经测试,但应该可以提供对 QueueXyz 的访问。我有一个用例,其中我想通过连接字符串连接到存储帐户一次然后

  1. 读取不同的队列(传递队列名称并从该队列获取消息)
  2. 列出该存储帐户中存在的所有队列

我发现了类似下面的内容,但这是使用已弃用的包:Microsoft.WindowsAzure.Storage 我们的解决方案中未使用该包。有什么我们可以用类似的新包做的吗:Azure.Storage.Queues

public static void CreateKnownAzureQueues(string azureConnectionString)
{
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(azureConnectionString);
    CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

    foreach (var queueName in AzureQueues.KnownQueues)
    {
        queueClient.GetQueueReference(queueName).CreateIfNotExists();
    }
}

此外,在 link 下方找到请求存储帐户中所有队列的列表。但是,它没有提供任何示例。
https://docs.microsoft.com/en-us/rest/api/storageservices/list-queues1#request

使用Azure.Storage.Queues包时,可以使用下面的代码来达到目的:

        QueueServiceClient serviceClient = new QueueServiceClient(conn_str);
        
        //list all queues in the storage account
        var myqueues = serviceClient.GetQueues().AsPages();

        //then you can write code to list all the queue names          
        foreach (Azure.Page<QueueItem> queuePage in myqueues)
        {
            foreach (QueueItem q in queuePage.Values)
            {
                Console.WriteLine(q.Name);
            }

        }

        //get a queue client
        var myqueue_client = serviceClient.GetQueueClient("the queue name");