UNPKG

rabbitmq-event-manager

Version:

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

126 lines 5.26 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const amqp = require("amqplib"); const EventManagerError_1 = require("../lib/EventManagerError"); const logger_1 = require("../lib/logger"); let connection = null; let channel = null; /** * Connect to the rabbitMQ server. * * @param url The url of the RabbitMQ Server (including crentials and vhosts) */ function connect(url) { return __awaiter(this, void 0, void 0, function* () { try { logger_1.LOGGER.debug(`Connect to RabbitMQ server on ${url}`); if (connection === null) { connection = yield amqp.connect(url); } return connection; } catch (e) { logger_1.LOGGER.error('Unable to connect to RabbitMq Server', e); throw new EventManagerError_1.EventManagerError('Unable to connect to RabbitMq Server', e); } }); } exports.connect = connect; /** * Disconnect everything from RabbitMQ */ function disconnect() { return __awaiter(this, void 0, void 0, function* () { if (channel) { yield channel.close(); channel = null; } if (connection) { yield connection.close(); connection = null; } }); } exports.disconnect = disconnect; function createChannel(url) { return __awaiter(this, void 0, void 0, function* () { try { logger_1.LOGGER.debug(`Create Channel on ${url}`); if (channel === null) { const connection = yield amqp.connect(url); channel = yield connection.createConfirmChannel(); } logger_1.LOGGER.info(`Channel Created on ${url}`); return channel; } catch (e) { logger_1.LOGGER.error('Unable to create a channel on to RabbitMq Server', e); throw new EventManagerError_1.EventManagerError('[RABBITMQ] - Unable to create a channel on to RabbitMq Server', e); } }); } exports.createChannel = createChannel; function createExchange(channel, name, alternateExchangeName = null, options = { durable: true, autoDelete: false }) { return __awaiter(this, void 0, void 0, function* () { logger_1.LOGGER.debug(`Create Exchange ${name}`); const exOptions = Object.assign({ durable: true, autoDelete: false }, options); if (alternateExchangeName) { exOptions.alternateExchange = alternateExchangeName; } yield channel.assertExchange(name, 'fanout', exOptions); logger_1.LOGGER.info(`Exchange ${name} created`); return name; }); } exports.createExchange = createExchange; function publish(channel, exchangeName, payload, options) { logger_1.LOGGER.debug(`Publish message to exchange ${exchangeName}`); return new Promise((resolve, reject) => { const stringPayload = JSON.stringify(payload); channel.publish(exchangeName, '', new Buffer(stringPayload), { persistent: true, appId: options.application, timestamp: payload._metas ? payload._metas.timestamp : Date.now(), messageId: payload._metas ? payload._metas.guid : '', }, err => { if (err) { logger_1.LOGGER.error('Unable to publish', err); reject(err); } else { logger_1.LOGGER.info(`Message published to exchange ${exchangeName}`); logger_1.LOGGER.debug('Message payload', payload); resolve(payload); } }); }); } exports.publish = publish; function createQueue(channel, queueName, exchangeName, options) { return __awaiter(this, void 0, void 0, function* () { logger_1.LOGGER.debug(`Create Queue ${queueName} binded to ${exchangeName}`); const qOptions = Object.assign({ durable: true, autoDelete: false }, options); yield channel.assertQueue(queueName, qOptions); yield channel.bindQueue(queueName, exchangeName, ''); yield channel.prefetch(1); logger_1.LOGGER.debug(`Queue ${queueName} binded to ${exchangeName} Created`); return queueName; }); } exports.createQueue = createQueue; var consume_1 = require("./helper/consume"); exports.consume = consume_1.consume; var deleteExchange_1 = require("./helper/deleteExchange"); exports.deleteExchange = deleteExchange_1.deleteExchange; var deleteQueue_1 = require("./helper/deleteQueue"); exports.deleteQueue = deleteQueue_1.deleteQueue; //# sourceMappingURL=index.js.map