UNPKG

rabbitmq-event-manager

Version:

A nodeJS Event Manager to emit, and listen event through RabbitMQ

60 lines 2.61 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const EventManagerError_1 = require("../../lib/EventManagerError"); const logger_1 = require("../../lib/logger"); function consume(channel, queueName, listener, options) { logger_1.LOGGER.info(`Consume messages of queue ${queueName}`); return new Promise((resolve, reject) => { try { channel.consume(queueName, message => { logger_1.LOGGER.debug(`Message received on queue ${queueName}`); if (message) { try { const payload = JSON.parse(message.content.toString()); const key = payload._metas.guid; listener(payload) .then((response) => { acknowledgeMessage({ message, key, channel }); resolve(response); }) .catch(err => { flushMessage({ message, channel, key, options }); reject(new EventManagerError_1.EventManagerError('Listener throws Error, message has been flushed', err)); }); } catch (e) { logger_1.LOGGER.error(`Message unreadable, unable to parse JSON parsed on ${queueName}, flushing...`, e); flushMessage({ message, channel, key: 'unable to parse key', options, }); reject(new EventManagerError_1.EventManagerError(`Error Parsing message`, e)); } } else { reject(new EventManagerError_1.EventManagerError(`Message received is null or not defined`)); } }); } catch (e) { reject(new EventManagerError_1.EventManagerError(`Error Consuming queue.`, e)); } }); } exports.consume = consume; /** * Helper function to make the consume method more readable */ function flushMessage(params) { const { channel, message, key, options } = params; channel.nack(message, false, false); logger_1.LOGGER.warn(`Message with guid ${key} has been flushed.`); } function acknowledgeMessage(params) { const { key, channel, message } = params; logger_1.LOGGER.debug('Message has been ackowledged'); channel.ack(message); } //# sourceMappingURL=consume.js.map