fix: create rabbitmq queues on set config

This commit is contained in:
Davidson Gomes 2023-08-31 16:49:50 -03:00
parent 16a18c4f22
commit 9123d7014d
3 changed files with 34 additions and 1 deletions

View File

@ -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);
});
};

View File

@ -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);
}

View File

@ -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 } };
}