off-sqs-debearloper
Version:
Helper app that manages SQS and RabbitMQ transactions
83 lines (73 loc) • 2.23 kB
JavaScript
var AWS = require('aws-sdk'),
amqp = require('amqplib'),
config = require('./config'),
when = require('when');
var getSQSMessages = function(){
var receiveParams = {
QueueUrl: this.queueUrl,
MaxNumberOfMessages: this.MaxNumberOfMessages,
WaitTimeSeconds: this.WaitTimeSeconds //Change to 20 seconds?
};
AWS.config.update(config.awsConfigFile);
var sqs = new AWS.SQS();
var self = this;
sqs.receiveMessage(receiveParams, function(err, data){
if(err){
console.log("/38, " + err);
}else{
if(data['Messages']){
// Start the crawling service
var parsedData = parseMessage(data);
self.callback(parsedData);
// deletes the received messages from the queue
var toDelete=[];
for (var i=0; i<data['Messages'].length;i++){
toDelete.push({
'Id':data['Messages'][i]['MessageId'],
'ReceiptHandle':data['Messages'][i]['ReceiptHandle']
});
};
var deleteParams = {
QueueUrl: self.queueUrl,
Entries : toDelete
};
sqs.deleteMessageBatch(deleteParams, function(err, deleted){
if (err) {
console.log("/54, " + err);
};
});
};
getMessages.call(self);
};
});
};
var getRabbitMQMessages = function(){
var url = this.queueUrl,
self = this;
amqp.connect('amqp://localhost').then(function(conn){
process.once('SIGINT', function(){
conn.close();
});
return conn.createChannel().then(function(channel){
var ok = channel.assertQueue(url, {durable: false});
ok = ok.then(function(_qok){
return channel.consume(url, function(msg){
var data = [];
data.push(msg.content.toString());
self.callback(data);
}, {noAck: true});
});
return ok.then(function(_consumeOk){
});
});
}).then(null, console.warn);
};
module.exports = getMessages = function(){
this.getSQSMessages = getSQSMessages;
this.getRabbitMQMessages = getRabbitMQMessages;
if(config.env.production || config.env.qa){
return this.getSQSMessages();
}else{
return this.getRabbitMQMessages();
}
};