zoukankan      html  css  js  c++  java
  • 怎么使用Windows Azure Queue Storage 服务

    什么是Windows Azure Queue Storage 队列存储

    Windows Azure Queue Storage存储大量的信息,可以在世界任何地方通过验证的调用,使用HTTP或HTTPS访问的服务。一个单一的队列信息可高达64KB的大小,队列可以包含数百万条消息,每个存储帐户(storage account)限制的总容量高达100TB。队列存储的常见用途包括:

    • 创建异步处理积压的工作
    • 从Windows Azure的Web角色的消息传递到Windows Azure Worker角色

    基本概念

    队列服务包含以下组件:

    Queue1

    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可以到云管理平台查询到

    image

    连接窜组成格式如下:

    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
  • 相关阅读:
    TyvjP2018 「Nescafé26」小猫爬山
    简化版桶排序
    getchar吸收回车
    fprintf与fscanf
    c语言命令行参数
    bit、byte、位、字节、汉字的关系
    C语言联合体
    结构体
    关于Integer的parseInt(String s, int radix)方法的使用
    java中nextLine()和next()的区别
  • 原文地址:https://www.cnblogs.com/ericwen/p/2831228.html
Copyright © 2011-2022 走看看