UNPKG

off-sqs-debearloper

Version:

Helper app that manages SQS and RabbitMQ transactions

83 lines (73 loc) 2.23 kB
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(); } };