怎麼使用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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章