问题描述
我正在按照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的访问。我有一个用例,我想一次通过连接字符串连接到存储帐户,然后
我发现了类似下面的内容,但这是使用了不赞成使用的包:我们在解决方案中未使用的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();
}
}
此外,在链接之下还可以请求存储帐户中所有队列的列表。但是,它没有提供任何此类示例。
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");