From 9123d7014de8f0c62524f73ca6e1f0fabfb440b7 Mon Sep 17 00:00:00 2001 From: Davidson Gomes Date: Thu, 31 Aug 2023 16:49:50 -0300 Subject: [PATCH] fix: create rabbitmq queues on set config --- src/libs/amqp.server.ts | 28 +++++++++++++++++++ .../controllers/instance.controller.ts | 5 +++- src/whatsapp/services/rabbitmq.service.ts | 2 ++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/libs/amqp.server.ts b/src/libs/amqp.server.ts index cc0f13b5..272577d9 100644 --- a/src/libs/amqp.server.ts +++ b/src/libs/amqp.server.ts @@ -41,3 +41,31 @@ export const initAMQP = () => { export const getAMQP = (): amqp.Channel | null => { return amqpChannel; }; + +export const initQueues = (instanceName: string, events: string[]) => { + const queues = events.map((event) => { + return `${event.replace(/_/g, '.').toLowerCase()}`; + }); + + queues.forEach((event) => { + const amqp = getAMQP(); + const exchangeName = instanceName ?? 'evolution_exchange'; + + amqp.assertExchange(exchangeName, 'topic', { + durable: true, + autoDelete: false, + }); + + const queueName = `${instanceName}.${event}`; + + amqp.assertQueue(queueName, { + durable: true, + autoDelete: false, + arguments: { + 'x-queue-type': 'quorum', + }, + }); + + amqp.bindQueue(queueName, exchangeName, event); + }); +}; diff --git a/src/whatsapp/controllers/instance.controller.ts b/src/whatsapp/controllers/instance.controller.ts index 3030a060..ed466284 100644 --- a/src/whatsapp/controllers/instance.controller.ts +++ b/src/whatsapp/controllers/instance.controller.ts @@ -5,6 +5,7 @@ import EventEmitter2 from 'eventemitter2'; import { ConfigService, HttpServer } from '../../config/env.config'; import { Logger } from '../../config/logger.config'; import { BadRequestException, InternalServerErrorException } from '../../exceptions'; +import { initQueues } from '../../libs/amqp.server'; import { RedisCache } from '../../libs/redis.client'; import { InstanceDto } from '../dto/instance.dto'; import { RepositoryBroker } from '../repository/repository.manager'; @@ -232,10 +233,12 @@ export class InstanceController { } this.rabbitmqService.create(instance, { enabled: true, - events: rabbitmq_events, + events: newEvents, }); rabbitmqEvents = (await this.rabbitmqService.find(instance)).events; + + initQueues(instance.instanceName, rabbitmqEvents); } catch (error) { this.logger.log(error); } diff --git a/src/whatsapp/services/rabbitmq.service.ts b/src/whatsapp/services/rabbitmq.service.ts index 383ad07a..a377595b 100644 --- a/src/whatsapp/services/rabbitmq.service.ts +++ b/src/whatsapp/services/rabbitmq.service.ts @@ -1,4 +1,5 @@ import { Logger } from '../../config/logger.config'; +import { initQueues } from '../../libs/amqp.server'; import { InstanceDto } from '../dto/instance.dto'; import { RabbitmqDto } from '../dto/rabbitmq.dto'; import { RabbitmqRaw } from '../models'; @@ -13,6 +14,7 @@ export class RabbitmqService { this.logger.verbose('create rabbitmq: ' + instance.instanceName); this.waMonitor.waInstances[instance.instanceName].setRabbitmq(data); + initQueues(instance.instanceName, data.events); return { rabbitmq: { ...instance, rabbitmq: data } }; }