microservice-support-toolkit
Version:
A global module with commons utilities for microservice support
49 lines (45 loc) • 1.56 kB
JavaScript
const amqp = require('amqplib/callback_api');
const { fetch } = require('./spring-cloud-config');
const logger = require('./logger');
const subscribeToSpringCloudBusTopic = ({
username,
password,
host,
port
}) => (
new Promise((resolve, reject) => {
const RABBITMQ_URL = `amqp://${username}:${password}@${host}:${port}`;
amqp.connect(RABBITMQ_URL, (error0, connection) => {
if (!connection) {
logger.error('Could not connect to RabbitMQ');
process.exit(1);
}
if (error0) {
return reject(error0);
}
connection.createChannel((error1, channel) => {
if (error1) return reject(error1);
const exchange = 'springCloudBus';
channel.assertExchange(exchange, 'topic', { durable: true });
channel.assertQueue('', {
autoDelete: true,
exclusive: true
}, (error2, q) => {
if (error2) return reject(error2);
logger.info(`Waiting for configs = require(Spring Cloud Bus | exchange: ${exchange} | pattern # | bindQueue: ${q.queue}`);
channel.bindQueue(q.queue, exchange, '#');
channel.consume(q.queue, (msg) => {
fetch().then(() => {
const event = JSON.parse(msg.content.toString());
logger.info(`${new Date(event.timestamp)} ${event.type} -> ${event.originService} -> ${event.destinationService}`)
})
}, { noAck: true });
resolve();
});
});
});
})
);
module.exports = {
subscribeToSpringCloudBusTopic
};