nodejs sqsキュープロセッサを作成しようとしています。Nodejs sqsキュープロセッサ
"use strict";
var appConf = require('./config/appConf');
var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config/aws_config.json');
var sqs = new AWS.SQS();
var exec = require('child_process').exec;
function readMessage() {
sqs.receiveMessage({
"QueueUrl": appConf.sqs_distribution_url,
"MaxNumberOfMessages": 1,
"VisibilityTimeout": 30,
"WaitTimeSeconds": 20
}, function (err, data) {
var sqs_message_body;
if (data.Messages) {
if (typeof data.Messages[0] !== 'undefined' && typeof data.Messages[0].Body !== 'undefined') {
//sqs msg body
sqs_message_body = JSON.parse(data.Messages[0].Body);
//make call to nodejs handler in codeigniter
exec('php '+ appConf.CI_FC_PATH +'/index.php nodejs_handler make_contentq_call "'+ sqs_message_body.contentq_cat_id+'" "'+sqs_message_body.cnhq_cat_id+'" "'+sqs_message_body.network_id+'"',
function (error, stdout, stderr) {
if (error) {
throw error;
}
console.log('stdout: ' + stdout);
if(stdout == 'Success'){
//delete message from queue
sqs.deleteMessage({
"QueueUrl" : appConf.sqs_distribution_url,
"ReceiptHandle" :data.Messages[0].ReceiptHandle
});
}
});
}
}
});
}
readMessage();
上記のコードは、キュー内の単一のメッセージに対してうまく機能します。すべてのメッセージが処理されるまでキュー内のメッセージのポーリングを続けるように、このスクリプトをどのように書くべきですか?私は設定タイムアウトを使用する必要がありますか?
こんにちは、この本をよく読んでください。 https://gist.github.com/yalamber/374add88e887e688d818 – Yalamber
また、このスクリプトの実行中にメモリリークが心配する必要がありますか? – Yalamber
@askkirati更新済み! – zavg