UNPKG

@incdevco/framework

Version:
168 lines (97 loc) 3.67 kB
var AWS = require('aws-sdk'); var Consumer = require('../consumer'); function Director(config) { config = config || {}; this.consumer = config.consumer || new Consumer(); this.maxNumberOfMessages = config.maxNumberOfMessages || 1; this.queueUrl = config.queueUrl; this.useSns = (config.useSns) ? true : false; this.sqs = config.sqs || new AWS.SQS(); this.topicArn = config.topicArn; this.visibilityTimeout = config.visibilityTimeout || 30; this.waitTimeSeconds = config.waitSeconds || 0; } Director.prototype.consume = function (action, index, deleteMessageFn) { console.log('action', index, JSON.stringify(action, null, 2)); return this.consumer.consume(action, index, deleteMessageFn) .then(function (result) { console.log('result', index, JSON.stringify(result, null, 2)); return result; }) .catch(function (exception) { console.log('exception', index, JSON.stringify(exception, null, 2)); throw exception; }); }; Director.prototype.deleteMessage = function (message) { return this.sqs.deleteMessage({ ReceiptHandle: message.ReceiptHandle, QueueUrl: this.queueUrl }).promise() .then(function (result) { console.log('result', JSON.stringify(result, null, 2)); return result; }) .catch(function (exception) { console.log('exception', JSON.stringify(exception, null, 2)); throw exception; }); }; // will poll sqs to receive messages Director.prototype.poll = function (params) { var self = this; params = params || {}; params.QueueUrl = params.QueueUrl || this.queueUrl; params.MaxNumberOfMessages = params.MaxNumberOfMessages || this.maxNumberOfMessages; params.VisibilityTimeout = params.VisibilityTimeout || this.visibilityTimeout; params.WaitTimeSeconds = params.WaitTimeSeconds || this.waitTimeSeconds; console.log('sqs.receiveMessages', JSON.stringify(params, null, 2)); return this.sqs.receiveMessage(params).promise() .then(function (result) { var promise = Promise.resolve(true); console.log('result', JSON.stringify(result, null, 2)); if (result.Messages) { result.Messages.forEach(function (message, index) { var action = JSON.parse(message.Body); promise = promise.then(function () { return self.consume(action, function () { return self.deleteMessage(message); }, index); }); }); } return promise; }) .then(function (result) { console.log('result', JSON.stringify(result, null, 2)); return result; }) .catch(function (exception) { console.log('exception', JSON.stringify(exception, null, 2)); throw exception; }); }; // will receive events with delivered with SNS Director.prototype.receive = function (event) { var promise = Promise.resolve(true), self = this; console.log('event', JSON.stringify(event, null, 2)); event.Records.forEach(function (record, index) { var action = JSON.parse(record.Sns.Message); promise = promise.then(function () { return self.consume(action, index); }); }); return promise .then(function (result) { console.log('result', JSON.stringify(result, null, 2)); return result; }) .catch(function (exception) { console.log('exception', JSON.stringify(exception, null, 2)); throw exception; }); }; module.exports = Director;