nibi
Version:
Extremely easy management of queues with RabbitMQ and/or AmazonSQS
80 lines (63 loc) • 2 kB
JavaScript
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()
}