pink-bears
Version:
Intelligent rate limiting middleware with MongoDB integration and caching for Node.js applications
60 lines • 1.69 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;