pink-bears
Version:
Intelligent rate limiting middleware with MongoDB integration and caching for Node.js applications
53 lines (48 loc) • 1.86 kB
JavaScript
const amqp = require('amqp-connection-manager');
const {emitEvent} = require('../errorEmitter');
const {errorConstants} = require('../constants');
class Next {
constructor(rabbitMQurl) {
this.rabbitMQurl = rabbitMQurl;
}
async call(data, fName, payload, delay, priority) {
try {
const Payload = {
apps: [{ ...payload.appConfig }],
payload: { ...data, functionName: fName },
traceId: payload.traceId
}
if (delay) {
Payload.apps[0].queueMeta.delay.value = delay;
Payload.apps[0].queueMeta.delayNeeded = true;
} else {
Payload.apps[0].queueMeta.delay.value = 0;
Payload.apps[0].queueMeta.delayNeeded = false;
}
if (priority) {
Payload.apps[0].queueMeta.priorityGroup = priority;
} else {
Payload.apps[0].queueMeta.priorityGroup = 3;
}
this.connection = await amqp.connect([`${this.rabbitMQurl}`]);
this.channel = await this.connection.createChannel({
json: true,
setup: ()=>{}
});
await this.channel.publish(process.env.exchange, process.env.routingKey, Payload, { contentType: 'application/json', persistent: true })
.then(function() {
return true;
})
.catch(err => {
console.log("Message was rejected:", err.stack);
});
this.channel.close();
this.connection.close();
return { success: true };
} catch (error) {
console.log("Error occurred while sending messages : ", error);
await emitEvent(errorConstants.rabbitMQ, error);
}
}
}
module.exports = Next;