SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

正式リリースされたWindows Azureの力

キューを使用したWindows Azureストレージプログラミング

正式リリースされたWindows Azureの力(3)

  • X ポスト
  • このエントリーをはてなブックマークに追加

 前回は、Windows Azureに含まれるストレージサービスであるWindows Azureストレージについて解説し、ブロブとテーブルの2つのストレージを使用したサンプルを作成しました。今回は、残るストレージであるキューを用いて、Windows AzureのWebロールとWorkerロールを連携させるサンプルを作成します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 前回は、Windows Azureに含まれるストレージサービスである、Windows Azureストレージについて解説しました。さらに、ブロブとテーブルの2つのストレージを使用したサンプルを作成しました。今回は、残るストレージであるキューを用いて、Windows AzureのWebロールとWorkerロールを連携させるサンプルを作成してみます。

対象読者

  • クラウド技術に興味がある方
  • Windows Azureに興味がある方
  • Windows Azureストレージに興味がある方
  • Windows Azureストレージを使用したアプリケーション開発に興味がある方

Windows Azureストレージの簡単なおさらい

 まずはWindows Azureストレージについて、簡単に振り返っておきましょう。

 Windows Azureストレージは、次の表1にあるように、3種類のストレージをサポートしています。用途や扱うデータにより、どのストレージを使用するかが異なってきます。前回のサンプルでは、このうちブロブとテーブルを使用したアプリケーションを作成しました。

表1:Windows Azureストレージの種類
ストレージ 目的 構造
ブロブ データ保存 バイナリデータを保存のために使用。コンテナとブロブで構成
テーブル データ保存 分散Key-Valueストア。エンティティとプロパティで構成。PartitionKey、RowKey、Timestampの3つのシステム予約プロパティが定義されている
キュー メッセージ交換 非同期のメッセージ交換のために使用。キューとメッセージで構成

キューの概要

 それでは、今回扱うキューについて、もう少し詳しく見て行きましょう。

キューの使用目的

 先程の表1にあるように、ブロブとテーブルが主にデータ保存のために使用されるのに対して、キューはメッセージ交換のために用いられます。

 キューの使用例として、フロントエンドのWebロールで受け付けたHTTPリクエストにより、データの一括更新のような処理に長時間かかるプロセスを実行する、というようなケースについて考えてみましょう。

 もしWebロール上でプロセスを実行するなら、処理に時間がかかり結果としてタイムアウトエラーになる恐れがあります。このような長時間かかるプロセスの場合、バックグラウンドで動作するWorkerロールに処理を委ねることができます。Webロールからプロセスの実行を指示するメッセージをキューに作成します。Workerロールは一定期間ごとにキューを見張っており、キューにメッセージが届くならメッセージを取得しプロセスを実行します。最後にメッセージをキューから削除します。

 このようにキューは、WebロールやWorkerロール間でのメッセージ交換のために使用します。

キューの構造

 次の図1にあるように、Windows Azureストレージのルートの概念であるストレージアカウントの下に、キューとメッセージからなる2階層でキューストレージは構成されています。

図1:キューの階層構造
図1:キューの階層構造

 図が示すとおり、ストレージアカウントの下に、複数のキューを作成できます。各キューに格納されるメッセージ数に制限はありません。各メッセージのサイズは最大8KBです。メッセージにはバイナリや文字列などを自由に格納でき、取得時にはBase64でエンコードされた形でデータが返されます。

 キューから取得したメッセージは、明示的に削除しない限り、いつまでもキューに留まり続けます。キューからメッセージを取得すると、まずそのメッセージはデフォルト値で30秒間(最大で2時間)キュー内で見えない状態になります。この一定時間内に、メッセージの処理がシステム障害などの何らかの理由で失敗し、システム側で明示的にメッセージが削除されなかった場合には、一定時間経過後にそのメッセージが再びキュー内で見える状態になり、再取得することが可能になります。このようにキューには、エラー時のリトライの仕組みが備わっています。

開発環境を整える

 それでは、Windows Azureストレージを使用してプログラミングを行うための環境を整えましょう。

 シリーズ第1回第2回を参考にして、Windows Azureの開発環境のインストール、さらにクラウド環境に配置するために必要なWindows Azure Platformの購入を行ってください。

キューを使用したWindows Azureストレージプログラミング概要

 前回に説明したとおり、Windows Azureストレージにアクセスする方法は主に2種類あります。REST APIを直接呼び出す方法と、Windows Azure SDKに含まれているWindows Azureマネージライブラリを使用する方法です。

 .NET環境の場合には、Windows Azureマネージライブラリを使用する方が簡単かつ直感的にWindows Azureのストレージにアクセスできるため、お勧めです。今回のサンプルでも、ライブラリを使用してキューにアクセスします。

 前回も述べましたが、改めてWindows Azureストレージを操作するための代表的なクラスを確認しておきましょう。Windows Azureマネージライブラリには、Windows Azureストレージを操作するためのストレージクライアントライブラリ(Microsoft.WindowsAzure.StorageClient名前空間)が含まれています。表2を見ると、ブロブ、テーブル、キューの各ストレージの階層構造に合わせてクラスが設計されていることが分かります。例えば、キューを扱いたい場合には、CloudQueueClient、CloudQueue、CloudQueueMessageなどのクラスを使用するとよいことが理解できるでしょう。

 Windows Azureマネージライブラリの詳細については、前回の記事や、MSDNライブラリの「Windows Azure Managed Library Reference(英文)」をご覧ください。

表2:Windows Azureストレージクライアントライブラリ(Microsoft.WindowsAzure.StorageClient名前空間)の代表的なクラス
クラス 扱うストレージ 説明
CloudBlobClient ブロブ ブロブストレージ
CloudBlobContainer ブロブ コンテナ
CloudBlob ブロブ ブロブ
CloudTableClient テーブル テーブルストレージ
TableServiceEntity テーブル エンティティ
CloudQueueClient キュー キューストレージ
CloudQueue キュー キュー
CloudQueueMessage キュー メッセージ

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
サンプルアプリケーションの作成

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
正式リリースされたWindows Azureの力連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 広瀬 嘉久(株式会社ジェイテックジャパン)(ヒロセ ヨシヒサ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5222 2010/06/25 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング