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