normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

Windows Azure SDK for Node.js でキューストレージを利用する その1

id:waritohutsu:20120211:1328948258 で紹介したテーブルストレージの利用方法に引き続き、キューストレージの利用方法についても紹介する。
キューストレージは.NET SDK同様に利用することができたが、格納した文字列が文字化けした。その点に注意すれば、現時点でもキューストレージは利用可能だ。

キューの作成、メッセージの作成と挿入

早速コード例を記載する。

var azure = require('azure');
var ServiceClient = azure.ServiceClient;
var queueService = azure.createQueueService(
  ServiceClient.DEVSTORE_STORAGE_ACCOUNT,
  ServiceClient.DEVSTORE_STORAGE_ACCESS_KEY,
  ServiceClient.DEVSTORE_QUEUE_HOST
);

var uuid = require('node-uuid');


var queueName = "myqueue";
var metadata = { 'class': 'test' };

var messageText1 = "おっぱいおっぱい at " + new Date().toString();

// Create だが、IfNotExists もある
// queueService.createQueue(queueName, { metadata: metadata }, function (createError, queue, createResponse) {
queueService.createQueueIfNotExists(queueName, { metadata: metadata }, function (createError, queue, createResponse) {
   console.log(createError)
   console.log(queue);
   console.log(createResponse.isSuccessful);
});

//メッセージを作成し、返答結果を表示する
queueService.createMessage(queueName, messageText1, function (createMessageError, message, createMessageResponse) {
   console.log(createMessageError)
   console.log(message);
   console.log(createMessageResponse);
});

実行結果は以下の様になるので参考程度に眺めて頂ければ幸いだ。

>node.exe queue-main.js
null  
false 
true 
null 
{ queue: 'myqueue' }
{ isSuccessful: true,
  statusCode: 201,
  body: '',
  headers:
   { 'transfer-encoding': 'chunked',
     server: 'Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0',
     'x-ms-request-id': '528810c2-c2fc-48ed-a22e-7258a5e1e306',
     'x-ms-version': '2011-08-18',
     date: 'Sat, 11 Feb 2012 08:26:09 GMT' },
  md5: '1B2M2Y8AsgTpgAmY7PhCfg==' }

メッセージの取得と削除

次に、メッセージの取得と削除方法を紹介する。キューストレージに格納されたメッセージは、以下の様に明示的に削除しないと保存され続ける点に注意が必要だ。

var azure = require('azure');
var ServiceClient = azure.ServiceClient;
var queueService = azure.createQueueService(
  ServiceClient.DEVSTORE_STORAGE_ACCOUNT,
  ServiceClient.DEVSTORE_STORAGE_ACCESS_KEY,
  ServiceClient.DEVSTORE_QUEUE_HOST
);

var uuid = require('node-uuid');


var queueName = "myqueue";
var metadata = { 'class': 'test' };

var messageText1 = "おっぱいおっぱい at " + new Date().toString();

// Create だが、IfNotExists もある
// queueService.createQueue(queueName, { metadata: metadata }, function (createError, queue, createResponse) {
queueService.createQueueIfNotExists(queueName, { metadata: metadata }, function (createError, queue, createResponse) {
   console.log("createError = " + createError)
   console.log(queue);
   console.log("createResponse.isSuccessful = " + createResponse.isSuccessful);
});

queueService.getMessages(queueName, function (getError, getQueueMessages, getResponse) {
   console.log(getError);
   if( 0 < getQueueMessages.length ){
     for( var i=0; i<getQueueMessages.length ; i++ ){
        console.log(getQueueMessages[i].messagetext);
        queueService.deleteMessage(queueName, getQueueMessages[i].messageid, getQueueMessages[i].popreceipt, function (deleteError, deleted, deleteResponse) {
           console.log("deleteError = " + deleteError);
           console.log("deleted = " + deleted);
           console.log(deleteResponse);
        });
     }
   }
   //console.log(getResponse);
});

出力結果は以下になる。挿入したメッセージが文字化けしている点に注意してほしい。

>node.exe queue-main2.js
createError = null
false
createResponse.isSuccessful = true
null
&#198;4 at Sat Feb 11 2012 17:37:29 GMT+0900 ,B&#128;&#138;J
deleteError = null
deleted = true
{ isSuccessful: true,
  statusCode: 204,
  body: '',
  headers:
   { 'content-length': '0',
     server: 'Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0',
     'x-ms-request-id': '12dc6438-5c08-4510-a934-2b3002cf8f46',
     'x-ms-version': '2011-08-18',
     date: 'Sat, 11 Feb 2012 08:37:44 GMT' },
  md5: '1B2M2Y8AsgTpgAmY7PhCfg==' }