58 lines
1.0 KiB
TypeScript
58 lines
1.0 KiB
TypeScript
import amqplib from "amqplib";
|
|
|
|
let channel: amqplib.Channel;
|
|
|
|
async function connect(
|
|
RABBITMQ_USERNAME: string,
|
|
RABBITMQ_PASSWORD: string,
|
|
RABBITMQ_HOST: string,
|
|
RABBITMQ_PORT: string
|
|
) {
|
|
const open = await amqplib.connect(
|
|
`amqp://${RABBITMQ_USERNAME}:${RABBITMQ_PASSWORD}@${RABBITMQ_HOST}:${RABBITMQ_PORT}`
|
|
);
|
|
|
|
if (!open) {
|
|
console.log("⚡️[RabbitMQ]: connection failed");
|
|
return;
|
|
}
|
|
|
|
channel = await open.createChannel();
|
|
|
|
if (!channel) {
|
|
console.log("⚡️[RabbitMQ]: channel failed");
|
|
return;
|
|
}
|
|
}
|
|
|
|
async function sendEmail(
|
|
email: string,
|
|
templateId: string,
|
|
languageId: string,
|
|
bodyData: any
|
|
) {
|
|
if (!channel) {
|
|
console.log("⚡️[RabbitMQ]: channel not available");
|
|
return;
|
|
}
|
|
|
|
channel.sendToQueue(
|
|
process.env.RABBITMQ_MAIL_QUEUE as string,
|
|
Buffer.from(
|
|
JSON.stringify({
|
|
m: email,
|
|
t: templateId,
|
|
l: languageId,
|
|
b: bodyData,
|
|
})
|
|
)
|
|
);
|
|
}
|
|
|
|
const rabbitmq = {
|
|
connect,
|
|
sendEmail,
|
|
};
|
|
|
|
export default rabbitmq;
|