javascript で Azureキューへメッセージをエンキューする

こんにちは。日山(@hiiyan0402)です。
javascriptからAzureキューへメッセージをエンキューする方法をご紹介します。


下準備

キューのCORSを設定する

対象となるストレージアカウントに対して、エンキューのためのCORS(クロスオリジンリソース共有)を設定します。
Azureストレージライブラリを使って、以下のようなプログラムを実行します。

static void Main()
{
    const string connectionString = "{ ストレージアカウントの接続文字列 }";
    var account = CloudStorageAccount.Parse(connectionString);
    var client = account.CreateCloudQueueClient();

    var properties = client.GetServiceProperties();
    properties.Cors.CorsRules.Clear();
    properties.Cors.CorsRules.Add(new CorsRule()
    {
        AllowedHeaders = { "*" },
        AllowedMethods = CorsHttpMethods.Post,
        AllowedOrigins = { "*" },
        ExposedHeaders = { "*" },
        MaxAgeInSeconds = 600
    });
    client.SetServiceProperties(properties);
}

エンキューするためのSASを発行する

javascriptからアクセスキー抜きでキューへメッセージをエンキューするために、SAS(共有アクセス署名)を発行します。以下のプログラムのような処理でSASを発行します。以下を実行すると、SASが出力されます。

static void Main()
{
    const string connectionString = "{ ストレージアカウントの接続文字列 }";
    var account = CloudStorageAccount.Parse(connectionString);
    var client = account.CreateCloudQueueClient();
    var queue = client.GetQueueReference("{ キュー名 }");

    var sas = queue.GetSharedAccessSignature(new SharedAccessQueuePolicy
    {
        Permissions = SharedAccessQueuePermissions.Add,
        SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-10),
        SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(10),
    });

    Console.WriteLine(sas);
}

javascript

以下の通りのコードです。jQuery使用です。(jQuery大好きっ子です…)

http://base64.min.js // https://github.com/dankogai/js-base64
http://jquery-2.1.1.min.js

    $(function () {
        var account = '{ ストレージアカウント名 }';
        var queue = '{ キュー名 }';
        var url = 'https://' + account + '.queue.core.windows.net/' + queue + '/messages';
        var sas = '{ 発行したSAS }';
        var message = Base64.encode('{ エンキューするメッセージ }');
        var data = '' + message + '';
        $.post(url + sas, data);
    });
POST先のURLは、{AzureキューのURL} + “/messages” に発行したSASをURL引数として付加したものになります。AzureキューのURLは “https://{ストレージアカウント名}.queue.core.windows.net/{キュー名}” です。

POSTするメッセージは以下のフォーマットのXML

<queuemessage>
    <messagetext>{ Base64でエンコードされたメッセージ }</messagetext>
</queuemessage>
メッセージはBase64でエンコードする必要がある模様。Base64へのエンコードは以下のライブラリを使用しています。https://github.com/dankogai/js-base64
POST先のURLに”messages”を付けるとことか、メッセージはBase64でエンコードしないといけないとか、MSDNで見つからなかったので、涙目になりながらトライアンドエラーで調べました…。

今回も最後までご覧いただきありがとうございました!

TechTarget

クラウドエンジニア  日山 雅之による記事「Microsoft Azure スマート解説」がTechTarget Japanにて好評連載中です (全7回)