close

有些網站會導入 Queue 的機制,原因在於不想讓使用者長時間等待。例如使用者註冊網站會員,通常在註冊後會寄信到使用者所填入的信箱,但是在註冊時並不會馬上寄信,而是會留下一筆記錄然後就通知使用者已完成註冊的動作。這樣做的原因在於,如果寄信的機制出了問題或是寄信的時間過長,並不會影響到使用者的註冊及使用。而留下的這筆記錄,之後都會有一個 batch job 去處理,這樣的處理過程,讓註冊及寄信這兩個服務不會產生過大的相依性。

Azure 上有提供一個 Queue 的機制,讓開發人員不用額外去架 MSMQ 的服務,以下示範使用的方式。

首先在設定檔加入以下設定:

  <appSettings>
    <add key="queueStorage" value="DefaultEndpointsProtocol=http;AccountName=[Account];AccountKey=[Your Key]" />
  </appSettings>

 

之後宣告 CloudStorageAccount。

 Microsoft.WindowsAzure.Storage.CloudStorageAccount cloudAccount = Microsoft.WindowsAzure.Storage.CloudStorageAccount.DevelopmentStorageAccount;
 Microsoft.WindowsAzure.Storage.CloudStorageAccount.TryParse(Microsoft.WindowsAzure.CloudConfigurationManager.GetSetting("queueStorage"), out cloudAccount);

 

存取 Queue之前,可以先確認 Queue 已經建立。

CloudQueueClient queueClient = cloudAccount.CreateCloudQueueClient();
CloudQueue queue = queueClient.GetQueueReference("testmyqueue");
bool isSucc = queue.CreateIfNotExists();

新增訊息的方式也非常簡單。

CloudQueueMessage message = new CloudQueueMessage(input);
queue.AddMessage(message);

 

而取出訊息的方式如下。

                CloudQueueMessage qMessage = queue.GetMessage();
                while (qMessage != null)
                {
                    string value = qMessage.AsString;
                    Console.WriteLine(value);
                    qMessage = queue.GetMessage();
                }

 

Queue 的機制相當好用,如果要架設高流量網站,可以嚐試將這樣的技術導入部份的服務,可以避免服務停擺的可能。

arrow
arrow
    全站熱搜

    卑微研究生 發表在 痞客邦 留言(0) 人氣()