UNPKG

@63pokupki/nodejs-common

Version:
112 lines 3.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const amqp = require("amqplib/callback_api"); /** * Отправщик сообщений в очередь */ class RabbitSenderSys { constructor(connection) { this.connection = connection; this.aQuery = []; } /** * Отправить сообщение в очередь * @param msg */ sendToQueue(sQueue, msg) { this.aQuery[sQueue].sendToQueue(JSON.stringify(msg)); } /** * Получает данные по очереди * @param sQueue */ checkQueue(sQueue) { return new Promise((resolve, reject) => { this.aQuery[sQueue].channel.checkQueue(sQueue, (err, ok) => { if (err) reject(err); resolve(ok); }); }); } /** * Закрыть соединение */ close() { setTimeout(() => { this.connection.close(); }, 1000); } /** * Асинхронный конструктор * @param query */ static async Init(confConnect, queryList) { return new Promise((resolve, reject) => { try { /* подключаемся к серверу */ amqp.connect(confConnect, async function (error0, connection) { if (error0) { throw error0; } let rabbitSender = new RabbitSenderSys(connection); for (let kQuery in queryList) { let sQuery = queryList[kQuery]; rabbitSender.aQuery[sQuery] = await RabbitQueue.init(connection, sQuery); resolve(rabbitSender); } }); } catch (e) { reject(e); } }); } } exports.RabbitSenderSys = RabbitSenderSys; /** * Очередь */ class RabbitQueue { constructor(sQuery, conn, channel) { this.conn = conn; this.sQuery = sQuery; this.channel = channel; } sendToQueue(msg) { // console.log(this.sQuery, Buffer.from(msg)); this.channel.sendToQueue(this.sQuery, Buffer.from(msg), { persistent: true }); } checkQueue() { return new Promise((resolve, reject) => { // console.log(this.sQuery, Buffer.from(msg)); this.channel.checkQueue(this.sQuery, (data) => { resolve(data); }); }); } static async init(conn, sQuery) { return new Promise((resolve, reject) => { try { /* подключаемся к каналу */ conn.createChannel(function (error1, channel) { if (error1) { throw error1; } channel.assertQueue(sQuery, { durable: false }); /* отдаем новый экземпляр класса */ resolve(new RabbitQueue(sQuery, conn, channel)); }); } catch (e) { reject(e); } }); // return vQuery; } } //# sourceMappingURL=RabbitSenderSys.js.map