UNPKG

@denimlabs/amqp-delay-fsa

Version:
76 lines (67 loc) 3.06 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; // setup connection and start consuming // host: URL string for AMQP instance // queueName: name of queue to consume from // queueOptions: channel qassert queue config object follows amqplib format see http://www.squaremobius.net/amqp.node/channel_api.html var makeConsumeQueueTasks = function makeConsumeQueueTasks(_ref) { var amqp = _ref.amqp, host = _ref.host, queueName = _ref.queueName, queueOptions = _ref.queueOptions; return function (messageQueueReducer) { return amqp.connect(host).then(function (connection) { return connection.createChannel(); }).then(function (channel) { Promise.all([channel.assertQueue(queueName, queueOptions), channel.consume(queueName, function (message) { return messageQueueReducer(message, channel); })]); }); }; }; // pass in array of reducers or single reducer function. // if passing in array will automatically combine them. // reducers are just objects with methods. var makeRootMessageQueueReducer = function makeRootMessageQueueReducer(reducers) { var rootReducer = void 0; var processedCount = 0; if (Array.isArray(reducers)) { rootReducer = combineReducerArray(reducers); } else if ((typeof reducers === 'undefined' ? 'undefined' : _typeof(reducers)) === 'object') { rootReducer = reducers; } return function (message, channel) { var decodedMessagePayload = decode(message.content); var messageType = decodedMessagePayload.type; if (!rootReducer[messageType]) { console.warn('Unknown message type: ' + messageType); } else if (typeof rootReducer[messageType] !== 'function') { console.warn('Message reducer type not a valid function: ' + messageType); } else { rootReducer[messageType](decodedMessagePayload); } console.log('\n\nProcessed Task: #' + processedCount + ' ' + messageType + ' at ' + new Date().getMinutes() + ':' + new Date().getSeconds() + '\n\n'); processedCount++; // because we are using dead-letter-exchange we have to ack even bad messages else we will // create a loop of consume -> reject -> deadletter -> consume..... channel.ack(message); }; }; // combines multiple reducer objects into single reducer var combineReducerArray = function combineReducerArray(reducers) { return reducers.reduce(function (reducer, currentReducer) { return Object.assign(currentReducer, reducer); }, {}); }; // decodes Buffer into JSON var decode = function decode(payload) { return JSON.parse(payload.toString('utf8')); }; exports.default = { makeConsumeQueueTasks: makeConsumeQueueTasks, makeRootMessageQueueReducer: makeRootMessageQueueReducer }; //# sourceMappingURL=amqp-worker-service.js.map