Windows Azure Storage、Queue編

Azureでのデータの永続化には、TableやQueue、Blobなどが用意されているらしいです。
とりあえず、TableとQueueを使ってみようかと。
今回はQueueの使い方をメモしておきます。

1・AzureServiceDeveloperPortalでStorageAccoutを作成する。
Storage Account NameがUrlのサブドメインとして使われます。
 
以下はVisualstudioのCloudProjectでの作業になります。

2・ServiceDefinition.csdefを設定する。

エレメントに

<Setting name="AccountName"/>
<Setting name="AccountSharedKey" />
<Setting name="UsePathStyleUris"  />
<Setting name="QueueStorageEndpoint" />
<Setting name="TableStorageEndpoint" />

を追加する。

3・ServiceConfiguration.csftを設定する。
AccountNameのvalue属性に、1で指定したAccoutNameを入力。
AccoutSharedKeyに、Storageプロジェクトに表示されるPrimaryAccessKeyを入力。
EndPointにそれぞれのAccoutNameを除いたUrlを入力。

例・

<Setting name="AccountName" value="アカウント名"/>
<Setting name="AccountSharedKey" value="キー"/>
<Setting name="UsePathStyleUris" value="false" />
<Setting name="QueueStorageEndpoint" value="http://queue.core.windows.net"/>
<Setting name="TableStorageEndpoint" value="http://table.core.windows.net"/>

4・StorageClientプロジェクトをソリューションに追加。
http://www.microsoft.com/azure/trainingkit.mspx
TraningKitをインストールすれば
C:\AzureServicesKit\Labs\UsingWindowsAzureTables\Assets
などにあるStorageClientをソリューションに追加すると便利です。

5・Queueを使うコードを記載します。

Queueを追加する。(String)

StorageAccountInfo accountInfo = StorageAccountInfo.GetAccountInfoFromConfiguration("QueueStorageEndpoint");
QueueStorage service = QueueStorage.Create(accountInfo);

MessageQueue queue = service.GetQueue("messages");
if (queue.DoesQueueExist() != true)
{
     queue.CreateQueue();
}
Message msg = new Message("メッセージ");
queue.PutMessage(msg);


Queueを見る(String)

StorageAccountInfo accountInfo = StorageAccountInfo.GetDefaultQueueStorageAccountFromConfiguration();
QueueStorage service = QueueStorage.Create(accountInfo);

MessageQueue queue = service.GetQueue("messages");
if (queue.DoesQueueExist())
{
   Message msg = queue.GetMessage();
   if (msg != null)
      {
         string value = msg.ContentAsString();
      }
}

Queueを削除する

StorageAccountInfo accountInfo = StorageAccountInfo.GetDefaultQueueStorageAccountFromConfiguration();
QueueStorage service = QueueStorage.Create(accountInfo);

MessageQueue queue = service.GetQueue("messages");

if (queue.DoesQueueExist())
{
   Message msg = queue.GetMessage();

      if (msg != null)
      {
         queue.DeleteMessage(msg);
      }
}


とりあえず、dotwowのThumbnailServiceの一部をcloudで提供してみた。
http://dotwow.cloudapp.net/thumbnail.aspx?url=http://yahoo.com
urlの部分を変更すれば、そのページのサムネイルを取りに行きます。

メインのサービスはnetTcpBindingをbasicHttpBindingにするのがめんどくさいな・・・