UNPKG

@awesomeniko/kafka-trail

Version:

A Node.js library for managing message queue with Kafka

57 lines 2.01 kB
import { ConsumerSubscribeError } from "../custom-errors/kafka-errors.js"; import { ifNanUseDefaultNumber } from "../libs/helpers/castings.js"; import { retry } from "../libs/helpers/retry.js"; import { KTKafkaBroker } from "./kafka-broker.js"; class KTKafkaConsumer extends KTKafkaBroker { #isConnected = false; #logger; consumer; #subscribeRetry = { interval: 2000, retries: 50, }; constructor(params) { super(params); const { consumerGroupId, subscribeRetries, subscribeRetryInterval, heartbeatInterval, } = params.kafkaSettings; if (!consumerGroupId) { throw new Error("group id must be provided"); } const { logger } = params; this.#logger = logger; this.#subscribeRetry.retries = ifNanUseDefaultNumber(subscribeRetries, 30); this.#subscribeRetry.interval = ifNanUseDefaultNumber(subscribeRetryInterval, 2000); const hbInterval = ifNanUseDefaultNumber(heartbeatInterval, 30); this.consumer = this._kafka.consumer({ groupId: consumerGroupId, allowAutoTopicCreation: false, heartbeatInterval: hbInterval, }); } isConnected() { return this.#isConnected; } async init() { await this.consumer.connect(); this.#isConnected = true; return this.isConnected(); } async destroy() { await this.consumer.stop(); this.#isConnected = false; await this.consumer.disconnect(); } async subscribeTopic(topics) { const isSubscribed = await retry(async () => await this.consumer.subscribe({ topics, fromBeginning: true, }), this.#logger, { maxRetries: this.#subscribeRetry.retries, interval: this.#subscribeRetry.interval, }); if (!isSubscribed) { throw new ConsumerSubscribeError(); } } } export { KTKafkaConsumer }; //# sourceMappingURL=kafka-consumer.js.map