rabbitmq-event-manager
Version:
A nodeJS Event Manager to emit, and listen event through RabbitMQ
60 lines • 2.61 kB
JavaScript
;
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