テスターですが何か?

ホビープログラマ略してHPです

【日本語訳】Exploring Windows Azure Storage part17

leave a comment »

このエントリーはMSDNのチュートリアル「Exploring Windows Azure Storage」の「Task3 – Retrieving Message from the Queue」の日本語訳になります。このコンテンツ、日本語訳全体については、こちらのエントリーを参照してください。

 

Task3 – Retrieving Message from the Queue

このエントリーでは、Workerロールのプログラムを変更して、キューからメッセージを取り出しエミュレーターログに表示できるようにします。

 

1.RdStorage_WebRole プロジェクトの Global.aspx.cs / Global.aspx.vb ファイルを開きます。

2.以下、アカウント情報を初期化する処理を Application_Start メソッドに追加します。

(コードスニペット – ExploringWindowsAzureStorage-Ex03-06-InitializeAccount-CS)

        void Application_Start(object sender, EventArgs e)
        {
            // アプリケーションのスタートアップで実行するコードです
            CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) =>
                {
                    configSetter(RoleEnvironment.GetConfigurationSettingValue(configName));
                });
        }

(コードスニペット – ExploringWindowsAzureStorage-Ex03-06-InitializeAccount-VB)

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
        ' アプリケーションの起動時に呼び出されます。
        CloudStorageAccount.SetConfigurationSettingPublisher(
            Sub(configName, configSetter)
                configSetter(RoleEnvironment.GetConfigurationSettingValue(configName))
            End Sub)
    End Sub

3.ファイルの先頭に以下の名前空間宣言が存在することを確認します。

(コードスニペット – ExploringWindowsAzureStorage-Ex03-07-Namespace-CS)

using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.ServiceRuntime;

(コードスニペット – ExploringWindowsAzureStorage-Ex03-07-Namespace-VB)

Imports Microsoft.WindowsAzure
Imports Microsoft.WindowsAzure.ServiceRuntime

4.RsAtorage_WorkerRole プロジェクトの WorkerRole.cs / WorkerRole.vb ファイルを開きます。

5.WorkerRole.cs ファイルの return base.OnStart() 部分、WorkerRole.vb ファイルの Return Mybase.OnStart() の直前にアカウント情報を初期化する以下のコードを追加します。

(コードスニペット – ExploringWindowsAzureStorage-Ex03-08-InitializeAccount-CS)

        public override bool OnStart()
        {
            // 同時接続の最大数を設定します
            ServicePointManager.DefaultConnectionLimit = 12;

            // 構成の変更を処理する方法については、
            // MSDN トピック (http://go.microsoft.com/fwlink/?LinkId=166357) を参照してください。

            CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) =>
            {
                configSetter(RoleEnvironment.GetConfigurationSettingValue(configName));
            });

            return base.OnStart();
        }

(コードスニペット – ExploringWindowsAzureStorage-Ex03-08-InitializeAccount-VB)

    Public Overrides Function OnStart() As Boolean

        ' 同時接続の最大数を設定します 
        ServicePointManager.DefaultConnectionLimit = 12

        ' 構成の変更を処理する方法については、
        ' MSDN トピック (http://go.microsoft.com/fwlink/?LinkId=166357) を参照してください。

        CloudStorageAccount.SetConfigurationSettingPublisher(Sub(configName, configSetter)
                                                                 configSetter(RoleEnvironment.GetConfigurationSettingValue(configName))
                                                             End Sub)

        Return MyBase.OnStart()

    End Function

6.ファイルの先頭に以下の名前空間宣言が存在することを確認します。

(コードスニペット – ExploringWindowsAzureStorage-Ex03-09-Namespace-CS)

using System.Diagnostics;
using System.Threading;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.Diagnostics;
using Microsoft.WindowsAzure.ServiceRuntime;
using Microsoft.WindowsAzure.StorageClient;

(コードスニペット – ExploringWindowsAzureStorage-Ex03-09-Namespace-VB)

Imports System.Diagnostics
Imports System.Threading
Imports Microsoft.WindowsAzure
Imports Microsoft.WindowsAzure.Diagnostics
Imports Microsoft.WindowsAzure.ServiceRuntime
Imports Microsoft.WindowsAzure.StorageClient

7.Runメソッドにて、QueueStorage ヘルパーオブジェクトのインスタンスと、メッセージキューへの参照を取得します。Workerロールの呼び出し待ち時間をシュミレートしている部分を削除(コメントアウト)し、上記処理を追加します。

(コードスニペット – ExploringWindowsAzureStorage-Ex03-10-WorkerGetQueue-CS)

    public class WorkerRole : RoleEntryPoint
    {
        public override void Run()
        {
            // これはワーカーの実装例です。実際のロジックに置き換えてください。
            Trace.WriteLine("RdStorage_WorkerRole entry point called", "Information");

            //while (true)
            //{
            //    Thread.Sleep(10000);
            //    Trace.WriteLine("Working", "Information");
            //}

            // アカウント情報を初期化する
            var storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");

            // メッセージキューへの参照を取得する
            var queueClient = storageAccount.CreateCloudQueueClient();
            var queue = queueClient.GetQueueReference("messagequeue");
        }

(コードスニペット – ExploringWindowsAzureStorage-Ex03-10-WorkerGetQueue-VB)

    Public Overrides Sub Run()

        ' これは $safeprojectname$ の実装例です。実際のロジックに置き換えてください。
        Trace.WriteLine("RdStorage_WorkerRole entry point called.", "Information")

        'While (True)
        '    Thread.Sleep(10000)
        '    Trace.WriteLine("Working", "Information")
        'End While

        ' アカウント情報を初期化する
        Dim storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString")

        ' メッセージキューへの参照を取得する
        Dim queueClient As CloudQueueClient = storageAccount.CreateCloudQueueClient
        Dim queue = queueClient.GetQueueReference("messagequeue")

    End Sub

8.次に、キューからメッセージを取得しエミュレーターログに書きこむ処理を追加します。メッセージは取り出された時点でキューから削除されます。

(コードスニペット – ExploringWindowsAzureStorage-Ex03-11-WorkerGetMessages-CS)

        public override void Run()
        {
            // これはワーカーの実装例です。実際のロジックに置き換えてください。
            Trace.WriteLine("RdStorage_WorkerRole entry point called", "Information");

            // アカウント情報を初期化する
            var storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");

            // メッセージキューへの参照を取得する
            var queueClient = storageAccount.CreateCloudQueueClient();
            var queue = queueClient.GetQueueReference("messagequeue");

            // メッセージを取得し、コンピュートエミュレーターログに書きこむ
            while (true)
            {
                Thread.Sleep(10000);
                if (queue.Exists())
                {
                    var msg = queue.GetMessage();
                    if (msg != null)
                    {
                        Trace.TraceInformation(string.Format("メッセージ '{0}' を処理しました。", msg.AsString));
                        queue.DeleteMessage(msg);
                    }
                }
            }
        }

(コードスニペット – ExploringWindowsAzureStorage-Ex03-11-WorkerGetMessages-VB)

    Public Overrides Sub Run()

        ' これは $safeprojectname$ の実装例です。実際のロジックに置き換えてください。
        Trace.WriteLine("RdStorage_WorkerRole entry point called.", "Information")

        ' アカウント情報を初期化する
        Dim storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString")

        ' メッセージキューへの参照を取得する
        Dim queueClient As CloudQueueClient = storageAccount.CreateCloudQueueClient
        Dim queue = queueClient.GetQueueReference("messagequeue")

        ' メッセージを取得し、コンピュートエミュレーターログに書きこむ
        While (True)

            Thread.Sleep(10000)
            If queue.Exists Then

                Dim msg = queue.GetMessage
                If msg IsNot Nothing Then
                    Trace.TraceInformation(String.Format("メッセージ '{0}' を処理しました。", queue.DeleteMessage(msg))
                End If

            End If

        End While

    End Sub

Note: Workerロールのプロセスは GetMessage メソッドにて10秒ごとにキューからのメッセージの取得を行います。キューにメッセージが存在していれば、コンピュートエミュレーターログに表示されます。

 

次は「Verification」です。

Written by david9142

2011年12月24日 @ 5:15 PM

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。