UNPKG

nibi

Version:

Extremely easy management of queues with RabbitMQ and/or AmazonSQS

80 lines (63 loc) 2 kB
var AWS = require('aws-sdk') var amqp = require('amqplib') var when = require('when') var utils = require('./utils') var config = require('./config') var getSQSMessages = function () { var receiveParams = { QueueUrl: this.queueUrl, MaxNumberOfMessages: this.MaxNumberOfMessages, WaitTimeSeconds: this.WaitTimeSeconds } AWS.config.update(config.awsConfigFile) var sqs = new AWS.SQS() var self = this sqs.receiveMessage(receiveParams, function (err, data) { if (data['Messages']) { // Start the crawling service var parsedData = self.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) {}) } getMessages.call(self) }) } var getRabbitMQMessages = function () { var url = this.queueUrl var route = utils.buildRoute(this.config) var self = this amqp.connect(route).then(function (conn) { 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(null, data) }, {noAck: true}) }) return ok.then(function (_consumeOk) {}) }) }).then(null, function (err) { self.callback(err) }) } module.exports = getMessages = function () { this.getSQSMessages = getSQSMessages this.getRabbitMQMessages = getRabbitMQMessages return (config.service === 'rabbit') ? this.getRabbitMQMessages() : this.getSQSMessages() }