mirror of
https://github.com/EvolutionAPI/evolution-api.git
synced 2025-12-18 19:32:21 -06:00
Make rabbitMQ per events
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import * as amqp from 'amqplib/callback_api';
|
||||
|
||||
import { configService, Rabbitmq } from '../config/env.config';
|
||||
import { configService, HttpServer, Rabbitmq } from '../config/env.config';
|
||||
import { Logger } from '../config/logger.config';
|
||||
|
||||
const logger = new Logger('AMQP');
|
||||
@@ -9,8 +9,8 @@ let amqpChannel: amqp.Channel | null = null;
|
||||
|
||||
export const initAMQP = () => {
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
const uri = configService.get<Rabbitmq>('RABBITMQ').URI;
|
||||
amqp.connect(uri, (error, connection) => {
|
||||
const rabbitConfig = configService.get<Rabbitmq>('RABBITMQ');
|
||||
amqp.connect(rabbitConfig.URI, (error, connection) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
return;
|
||||
@@ -45,6 +45,7 @@ export const getAMQP = (): amqp.Channel | null => {
|
||||
|
||||
export const initQueues = (instanceName: string, events: string[]) => {
|
||||
if (!instanceName || !events || !events.length) return;
|
||||
const rabbitConfig = configService.get<Rabbitmq>('RABBITMQ');
|
||||
|
||||
const queues = events.map((event) => {
|
||||
return `${event.replace(/_/g, '.').toLowerCase()}`;
|
||||
@@ -60,7 +61,7 @@ export const initQueues = (instanceName: string, events: string[]) => {
|
||||
assert: true,
|
||||
});
|
||||
|
||||
const queueName = `${instanceName}.${event}`;
|
||||
const queueName = rabbitConfig.GLOBAL_EVENT_QUEUE ? event : `${instanceName}.${event}`;
|
||||
|
||||
amqp.assertQueue(queueName, {
|
||||
durable: true,
|
||||
@@ -76,6 +77,7 @@ export const initQueues = (instanceName: string, events: string[]) => {
|
||||
|
||||
export const removeQueues = (instanceName: string, events: string[]) => {
|
||||
if (!events || !events.length) return;
|
||||
const rabbitConfig = configService.get<Rabbitmq>('RABBITMQ');
|
||||
|
||||
const channel = getAMQP();
|
||||
|
||||
@@ -94,10 +96,64 @@ export const removeQueues = (instanceName: string, events: string[]) => {
|
||||
assert: true,
|
||||
});
|
||||
|
||||
const queueName = `${instanceName}.${event}`;
|
||||
const queueName = rabbitConfig.GLOBAL_EVENT_QUEUE ? event : `${instanceName}.${event}`;
|
||||
|
||||
amqp.deleteQueue(queueName);
|
||||
});
|
||||
|
||||
channel.deleteExchange(exchangeName);
|
||||
};
|
||||
|
||||
interface SendEventData {
|
||||
instanceName: string;
|
||||
wuid: string;
|
||||
event: string;
|
||||
apiKey?: string;
|
||||
data: any;
|
||||
}
|
||||
|
||||
export const sendEventData = ({ data, event, wuid, apiKey, instanceName }: SendEventData) => {
|
||||
const exchangeName = instanceName ?? 'evolution_exchange';
|
||||
|
||||
amqpChannel.assertExchange(exchangeName, 'topic', {
|
||||
durable: true,
|
||||
autoDelete: false,
|
||||
assert: true,
|
||||
});
|
||||
|
||||
const rabbitConfig = configService.get<Rabbitmq>('RABBITMQ');
|
||||
const queueName = rabbitConfig.GLOBAL_EVENT_QUEUE ? event : `${instanceName}.${event}`;
|
||||
|
||||
amqpChannel.assertQueue(queueName, {
|
||||
durable: true,
|
||||
autoDelete: false,
|
||||
arguments: { 'x-queue-type': 'quorum' },
|
||||
});
|
||||
|
||||
amqpChannel.bindQueue(queueName, exchangeName, event);
|
||||
|
||||
const serverUrl = configService.get<HttpServer>('SERVER').URL;
|
||||
const tzoffset = new Date().getTimezoneOffset() * 60000; //offset in milliseconds
|
||||
const localISOTime = new Date(Date.now() - tzoffset).toISOString();
|
||||
const now = localISOTime;
|
||||
|
||||
const message = {
|
||||
event,
|
||||
instance: instanceName,
|
||||
data,
|
||||
server_url: serverUrl,
|
||||
date_time: now,
|
||||
sender: wuid,
|
||||
};
|
||||
|
||||
if (apiKey) {
|
||||
message['apikey'] = apiKey;
|
||||
}
|
||||
|
||||
logger.log({
|
||||
queueName,
|
||||
exchangeName,
|
||||
event,
|
||||
});
|
||||
amqpChannel.publish(exchangeName, event, Buffer.from(JSON.stringify(message)));
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user