- 开始使用队列存储和 Visual Studio 连接服务 (ASP.NET Core)Get started with queue storage and Visual Studio connected services (ASP.NET Core)
- 使用代码访问队列Access queues in code
- 向队列添加消息Add a message to a queue
- 读取队列中的消息Read a message in a queue
- 读取和删除队列中的消息Read and remove a message in a queue
- 用于取消对消息进行排队的其他选项Additional options for dequeuing messages
- 获取队列长度Get the queue length
- 共同使用 Async Await 模式和公用队列 APIUse the Async-Await pattern with common queue APIs
- 删除队列Delete a queue
- 后续步骤Next steps
您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.
开始使用队列存储和 Visual Studio 连接服务 (ASP.NET Core)Get started with queue storage and Visual Studio connected services (ASP.NET Core)
本文内容
提示
试用 Microsoft Azure 存储资源管理器
Microsoft Azure 存储资源管理器是 Microsoft 免费提供的独立应用,适用于在 Windows、macOS 和 Linux 上以可视方式处理 Azure 存储数据。
本文介绍通过使用 Visual Studio 中的“连接服务”功能在 ASP.NET Core 项目中创建或引用 Azure 存储帐户之后,如何开始在 Visual Studio 中使用 Azure 队列存储。执行“连接服务”操作会安装相应的 NuGet 程序包,以访问项目中的 Azure 存储,并将存储帐户的连接字符串添加到项目配置文件中。(有关 Azure 存储的常规信息,请参阅存储文档。)
Azure 队列存储是一项可存储大量消息的服务,用户可以通过经验证的呼叫,使用 HTTP 或 HTTPS 从世界任何地方访问这些消息。一条队列消息的大小最多可为 64 千字节 (KB),一个队列中可以包含数百万条消息,直至达到存储帐户的总容量限值。有关以编程方式操作队列的详细信息,另请参阅通过 .NET 开始使用 Azure 队列存储。
若要开始,首先在存储帐户中创建 Azure 队列。本文随后会演示如何运用 C# 创建队列,以及如何执行基本的队列操作,如添加、修改、读取和删除队列消息。代码使用适用于 .NET 的 Azure 存储客户端库。有关 ASP.NET 的详细信息,请参阅 ASP.NET。
某些 Azure 存储 API 为异步,而本文中的代码假定正在使用异步方法。有关详细信息,请参阅异步编程。
使用代码访问队列Access queues in code
要访问 ASP.NET Core 项目中的队列,请将下列事项包含在访问 Azure 队列存储的任何 C# 源文件中。在接下来的部分中,会在代码的前面使用全部这些代码。
- 添加必要的
using
语句:
using Microsoft.Framework.Configuration;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Queue;
using System.Threading.Tasks;
using LogLevel = Microsoft.Framework.Logging.LogLevel;
- 获取表示存储帐户信息的
CloudStorageAccount
对象。使用下面的代码获取存储连接字符串和 Azure 服务配置中的存储帐户信息:
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("<storage-account-name>_AzureStorageConnectionString"));
- 获取
CloudQueueClient
对象,以引用存储帐户中的队列对象:
// Create the CloudQueueClient object for the storage account.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
- 获取
CloudQueue
对象,以引用特定队列:
// Get a reference to the CloudQueue named "messagequeue"
CloudQueue messageQueue = queueClient.GetQueueReference("messagequeue");
使用代码创建队列Create a queue in code
若要在代码中创建 Azure 队列,请调用 CreateIfNotExistsAsync
:
// Create the CloudQueue if it does not exist.
await messageQueue.CreateIfNotExistsAsync();
向队列添加消息Add a message to a queue
要在现有队列中插入消息,请创建新的 CloudQueueMessage
对象,并调用 AddMessageAsync
方法。可从字符串(UTF-8 格式)或字节数组创建 CloudQueueMessage
对象。
// Create a message and add it to the queue.
CloudQueueMessage message = new CloudQueueMessage("Hello, World");
await messageQueue.AddMessageAsync(message);
读取队列中的消息Read a message in a queue
通过调用 PeekMessageAsync
,可以扫视队列前面的消息,而不会从队列中删除它:
// Peek the next message in the queue.
CloudQueueMessage peekedMessage = await messageQueue.PeekMessageAsync();
读取和删除队列中的消息Read and remove a message in a queue
代码分两步从队列中删除消息(取消对消息的排队)。
- 调用
GetMessageAsync
以获取队列中的下一条消息。从GetMessageAsync
返回的消息对于从此队列读取消息的任何其他代码都是不可见的。默认情况下,此消息将持续 30 秒不可见。 - 若要完成从队列中删除消息,请调用
DeleteMessageAsync
。
此删除消息的两步过程可确保,如果代码因硬件或软件故障而无法处理消息,则代码的其他实例可以获取相同消息并重试。以下代码会在消息得到处理后立即调用DeleteMessageAsync
:
// Get the next message in the queue.
CloudQueueMessage retrievedMessage = await messageQueue.GetMessageAsync();
// Process the message in less than 30 seconds.
// Then delete the message.
await messageQueue.DeleteMessageAsync(retrievedMessage);
用于取消对消息进行排队的其他选项Additional options for dequeuing messages
可以通过两种方式自定义队列中的消息检索。首先,可以获取一批消息(最多 32 个)。其次,可以设置更长或更短的不可见超时时间,从而允许代码使用更多或更少时间来完全处理每个消息。以下代码示例使用 GetMessages
方法在一个调用中获取 20 条消息。然后,使用 foreach
循环处理每条消息。它还将每条消息的不可见超时时间设置为 5 分钟。请注意,这 5 分钟计时器对于所有消息都是同时开始的,因此在 5 分钟后,尚未删除的任何消息都将再次变为可见。
// Retrieve 20 messages at a time, keeping those messages invisible for 5 minutes,
// delete each message after processing.
foreach (CloudQueueMessage message in messageQueue.GetMessages(20, TimeSpan.FromMinutes(5)))
{
// Process all messages in less than 5 minutes, deleting each message after processing.
queue.DeleteMessage(message);
}
获取队列长度Get the queue length
可以获取队列中消息的估计数。使用 FetchAttributes
方法可请求队列服务来检索队列属性,包括消息计数。ApproximateMethodCount
属性将返回 FetchAttributes
方法检索到的最后一个值,而不会调用队列服务。
// Fetch the queue attributes.
messageQueue.FetchAttributes();
// Retrieve the cached approximate message count.
int? cachedMessageCount = messageQueue.ApproximateMessageCount;
// Display the number of messages.
Console.WriteLine("Number of messages in queue: " + cachedMessageCount);
共同使用 Async Await 模式和公用队列 APIUse the Async-Await pattern with common queue APIs
此示例演示如何将异步等待模式与以 Async
结尾的公用队列 API 结合使用。使用异步方法时,异步等待模式将暂停本地执行,直到调用完成。此行为允许当前的线程执行其他工作,这有助于避免性能瓶颈并提高应用程序的整体响应能力。
// Create a message to add to the queue.
CloudQueueMessage cloudQueueMessage = new CloudQueueMessage("My message");
// Async enqueue the message.
await messageQueue.AddMessageAsync(cloudQueueMessage);
Console.WriteLine("Message added");
// Async dequeue the message.
CloudQueueMessage retrievedMessage = await messageQueue.GetMessageAsync();
Console.WriteLine("Retrieved message with content '{0}'", retrievedMessage.AsString);
// Async delete the message.
await messageQueue.DeleteMessageAsync(retrievedMessage);
Console.WriteLine("Deleted message");
删除队列Delete a queue
若要删除队列及其内含的所有消息,请对队列对象调用 Delete
方法:
// Delete the queue.
messageQueue.Delete();
后续步骤Next steps
现在,已了解有关 Azure 队列存储的基础知识,可单击下面的链接来了解更复杂的存储任务。
- 有关可用 API 的完整详细信息,请查看用于 .NET 的 Azure 存储客户端库参考中的队列服务参考文档。
- 在通过 .NET 开始使用 Azure 队列存储中详细了解如何使用队列存储
- 若要了解如何简化编写用于 Azure 存储的代码,请查阅什么是 Azure WebJobs SDK
- 查看更多功能指南,以了解在 Azure 中存储数据的其他方式。
- 若要使用 Azure 存储表,请参阅通过 .NET 开始使用 Azure 表存储。
- 若要使用 Azure 存储 Blob,请通过 .NET 开始使用 Azure Blob 存储。
- 若要存储关系数据,请参阅使用 .NET (C#) 连接到 SQL 数据库。