feat: auto committed
This commit is contained in:
57
services/content/src/config/kafka.ts
Normal file
57
services/content/src/config/kafka.ts
Normal file
@@ -0,0 +1,57 @@
|
||||
import { Kafka } from "kafkajs";
|
||||
import { env } from "./env.js";
|
||||
import { logger } from "../shared/observability/logger.js";
|
||||
|
||||
export const kafka = new Kafka({
|
||||
brokers: env.KAFKA_BROKERS.split(","),
|
||||
clientId: "content-service",
|
||||
});
|
||||
|
||||
export const producer = kafka.producer({
|
||||
idempotent: true,
|
||||
transactionalId: "content-tx",
|
||||
});
|
||||
|
||||
export const neo4jSyncConsumer = kafka.consumer({
|
||||
groupId: "content-neo4j-sync",
|
||||
});
|
||||
|
||||
let producerIsConnected = false;
|
||||
|
||||
producer.on("producer.connect", () => {
|
||||
producerIsConnected = true;
|
||||
});
|
||||
producer.on("producer.disconnect", () => {
|
||||
producerIsConnected = false;
|
||||
});
|
||||
|
||||
export function isKafkaProducerConnected(): boolean {
|
||||
return producerIsConnected;
|
||||
}
|
||||
|
||||
export async function connectKafka(): Promise<void> {
|
||||
try {
|
||||
await producer.connect();
|
||||
logger.info("Kafka producer connected");
|
||||
} catch (err) {
|
||||
logger.warn(
|
||||
{
|
||||
err: err instanceof Error ? err.message : String(err),
|
||||
},
|
||||
"Kafka connect failed, running without Kafka (outbox will retry)",
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export async function disconnectKafka(): Promise<void> {
|
||||
try {
|
||||
await producer.disconnect();
|
||||
} catch {
|
||||
// ignore
|
||||
}
|
||||
try {
|
||||
await neo4jSyncConsumer.disconnect();
|
||||
} catch {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user