mirror of
https://github.com/EvolutionAPI/evolution-api.git
synced 2025-12-24 06:07:45 -06:00
feat(kafka): add Kafka integration for event streaming
- Introduced Kafka support in the Evolution API, allowing for real-time event streaming and processing. - Updated environment configuration to include Kafka-related variables. - Added KafkaController and KafkaRouter for managing Kafka events. - Enhanced event management to support Kafka alongside existing integrations. - Updated database schemas and migrations for Kafka integration in both MySQL and PostgreSQL. - Documented Kafka integration in the README file.
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import { KafkaController } from '@api/integrations/event/kafka/kafka.controller';
|
||||
import { NatsController } from '@api/integrations/event/nats/nats.controller';
|
||||
import { PusherController } from '@api/integrations/event/pusher/pusher.controller';
|
||||
import { RabbitmqController } from '@api/integrations/event/rabbitmq/rabbitmq.controller';
|
||||
@@ -17,6 +18,7 @@ export class EventManager {
|
||||
private natsController: NatsController;
|
||||
private sqsController: SqsController;
|
||||
private pusherController: PusherController;
|
||||
private kafkaController: KafkaController;
|
||||
|
||||
constructor(prismaRepository: PrismaRepository, waMonitor: WAMonitoringService) {
|
||||
this.prisma = prismaRepository;
|
||||
@@ -28,6 +30,7 @@ export class EventManager {
|
||||
this.nats = new NatsController(prismaRepository, waMonitor);
|
||||
this.sqs = new SqsController(prismaRepository, waMonitor);
|
||||
this.pusher = new PusherController(prismaRepository, waMonitor);
|
||||
this.kafka = new KafkaController(prismaRepository, waMonitor);
|
||||
}
|
||||
|
||||
public set prisma(prisma: PrismaRepository) {
|
||||
@@ -93,12 +96,20 @@ export class EventManager {
|
||||
return this.pusherController;
|
||||
}
|
||||
|
||||
public set kafka(kafka: KafkaController) {
|
||||
this.kafkaController = kafka;
|
||||
}
|
||||
public get kafka() {
|
||||
return this.kafkaController;
|
||||
}
|
||||
|
||||
public init(httpServer: Server): void {
|
||||
this.websocket.init(httpServer);
|
||||
this.rabbitmq.init();
|
||||
this.nats.init();
|
||||
this.sqs.init();
|
||||
this.pusher.init();
|
||||
this.kafka.init();
|
||||
}
|
||||
|
||||
public async emit(eventData: {
|
||||
@@ -119,42 +130,47 @@ export class EventManager {
|
||||
await this.sqs.emit(eventData);
|
||||
await this.webhook.emit(eventData);
|
||||
await this.pusher.emit(eventData);
|
||||
await this.kafka.emit(eventData);
|
||||
}
|
||||
|
||||
public async setInstance(instanceName: string, data: any): Promise<any> {
|
||||
if (data.websocket)
|
||||
if (data.websocket) {
|
||||
await this.websocket.set(instanceName, {
|
||||
websocket: {
|
||||
enabled: true,
|
||||
events: data.websocket?.events,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
if (data.rabbitmq)
|
||||
if (data.rabbitmq) {
|
||||
await this.rabbitmq.set(instanceName, {
|
||||
rabbitmq: {
|
||||
enabled: true,
|
||||
events: data.rabbitmq?.events,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
if (data.nats)
|
||||
if (data.nats) {
|
||||
await this.nats.set(instanceName, {
|
||||
nats: {
|
||||
enabled: true,
|
||||
events: data.nats?.events,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
if (data.sqs)
|
||||
if (data.sqs) {
|
||||
await this.sqs.set(instanceName, {
|
||||
sqs: {
|
||||
enabled: true,
|
||||
events: data.sqs?.events,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
if (data.webhook)
|
||||
if (data.webhook) {
|
||||
await this.webhook.set(instanceName, {
|
||||
webhook: {
|
||||
enabled: true,
|
||||
@@ -165,8 +181,9 @@ export class EventManager {
|
||||
byEvents: data.webhook?.byEvents,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
if (data.pusher)
|
||||
if (data.pusher) {
|
||||
await this.pusher.set(instanceName, {
|
||||
pusher: {
|
||||
enabled: true,
|
||||
@@ -178,5 +195,15 @@ export class EventManager {
|
||||
useTLS: data.pusher?.useTLS,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
if (data.kafka) {
|
||||
await this.kafka.set(instanceName, {
|
||||
kafka: {
|
||||
enabled: true,
|
||||
events: data.kafka?.events,
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user