UNPKG

pink-bears

Version:

Intelligent rate limiting middleware with MongoDB integration and caching for Node.js applications

53 lines (48 loc) 1.86 kB
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;