怎么使用Windows Azure Queue Storage 服务
发布网友
发布时间:2022-04-23 15:01
我来回答
共1个回答
热心网友
时间:2022-04-12 10:30
什么是Windows Azure Queue Storage 队列存储
Windows Azure Queue
Storage存储大量的信息,可以在世界任何地方通过验证的调用,使用HTTP或HTTPS访问的服务。一个单一的队列信息可高达64KB的大小,队列
可以包含数百万条消息,每个存储帐户(storage account)*的总容量高达100TB。队列存储的常见用途包括:
创建异步处理积压的工作
从Windows Azure的Web角色的消息传递到Windows Azure Worker角色
基本概念
队列服务包含以下组件:
URL 格式:队列服务,是通过REST来访问的,基于URL地址访问。格式如下:
http://<storage account>.queue.core.windows.net/<queue>
上面图表的Queue的URL为:
http://myaccount.queue.core.windows.net/imagesToDownload
存储账户(Storage Account):Azure Storage访问是通过REST方式,使用对称加密方式(Symmetric)。一个账户能访问所有的云存储(Blob、Table、Queue)。
队列(Queue):一个队列能存储大量的信息。存储队列不能保证FIFO,而且还能多次读取同一个消息。
消息(Message):能存储字符串或者字节数组,一个消息不能大于64k(包括除message信息的其他信息,传递的信息大小不能超过49152字节)。
创建存储账户
在使用云存储前,得需要到云管理平台上创建存储账户。
构建访问存储连接字符串(StorageConnectionString)
连接字符串包含三个部分:DefaultEndpointsProtocol,AccountName,AccountKey
EndpointsProtocol只能是https和http,再次说明他是基于REST方式访问的(REST over http or https)。
AccountName和AccountKey可以到云管理平台查询到
连接窜组成格式如下:
DefaultEndpointsProtocol=https;AccountName=[AccountName];AccountKey=[AccountKey]
配置文件
部署云服务需要两个文件,分别是*.cspkg和*.cscfg。
前者其实是一个zip压缩文件,包含所有部署的配置信息。
后者包含webrole和worker role的工作的具体信息。
我们可以把连接字符串写在*.cscfg里面,也就是开发时云服务项目的*.cloud.cscfg、*.local.cscfg、*.csdef文件里面。
<configuration>
<connectionStrings>
<add name="StorageConnectionString"
connectionString="DefaultEndpointsProtocol=https;AccountName=[AccountName];AccountKey=[AccountKey]" />
</connectionStrings>
</configuration>
怎样开发访问队列
需要的程序集如下:
Microsoft.WindowsAzure.Storage.dll
开发代码:
// 通过连接字符串解析CloudStorageAccount实例
// Endpoint "http://storageacount.queue.core.windows.net"
CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnetionString"));
#region 队列操作
// 创建客户端存储队列实例
CloudQueueClient queueClient = cloudStorageAccount.CreateCloudQueueClient();
// 通过队列名称获取服务端存储队列实例
// Endpoint "http://storageaccount.queue.core.windows.net/eric-queue-1".
// 队列名称必须为小写
CloudQueue cloudQueue = queueClient.GetQueueReference("eric-quque-1");
//也可以直接创建
//CloudQueue cloudQueue = new CloudQueue(new Uri("http://storageaccount.queue.core.windows.net/eric-queue-1"), new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials(accountName, keyValue));
// 如果队列不存在就创建一个
cloudQueue.CreateIfNotExists();
// 清除队列,清除可视、不可视和过期的所有消息。
cloudQueue.Clear();
// 删除队列,这个队列就不存在了
cloudQueue.Delete();
#endregion
#region 队列消息操作
// 发送消息,消息可以为字符串或者字节数组,最大为64K, TTL最大为7天,visibilityDelay必须小于TTL
cloudQueue.AddMessage(new CloudQueueMessage("Hello world!"), new TimeSpan(0, 0, 10), new TimeSpan(0, 0, 1), null, null);
// 获取消息, 获取从队头开始第一个可视的消息,就是nextVisibilityTimeout到了的消息
// 输入的参数visibilityTimeout是这个消息下次可视的时间间隔
// 通过Get方式获取的消息,能够更新(update)和删除(delete)
CloudQueueMessage message = cloudQueue.GetMessage(new TimeSpan(0, 0, 10));
// 修改消息,修改消息的内容和下次可视时间间隔, 也可以只修改下次可视时间间隔
message.SetMessageContent("Hello Eric Wen!");
cloudQueue.UpdateMessage(message, new TimeSpan(0, 0, 10), MessageUpdateFields.Content | MessageUpdateFields.Visibility);
cloudQueue.UpdateMessage(message, new TimeSpan(0, 0, 10), MessageUpdateFields.Visibility);
// 删除消息, 通过Get方式获取的消息,它的Id和PopReceipt有值,有这两个值才能修改和删除消息
cloudQueue.DeleteMessage(message);
cloudQueue.DeleteMessage(message.Id, message.PopReceipt);
// 查看消息,只能查看可视的消息,获取从队头开始第一个可视的消息。
// 查看消息不会改变CloudQueueMessage的DequeueCount和NextVisibleTime属性
// 这个消息是只读消息,不能更新和删除操作
message = cloudQueue.PeekMessage();
// 获取批量消息, 一次只能最多获取32条消息
IEnumerable<CloudQueueMessage> query = cloudQueue.GetMessages(32);
query = cloudQueue.PeekMessages(32);
#endregion