UNPKG

kafka-retry

Version:

Handle kafka non-blocking retries and dead letter topics for nestjs microservice

44 lines 1.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.KafkaAdmin = void 0; const constants_1 = require("./constants"); const utils_1 = require("./utils"); class KafkaAdmin { constructor(admin) { this.admin = admin; } async createRetryTopics(pattern, retryableTopic) { var _a; const currentTopics = await this.admin.listTopics(); const currentRetryTopics = currentTopics.filter((topic) => { return new RegExp((0, utils_1.getPatternRetryTopic)(pattern)).test(topic); }); const topics = []; const result = []; for (let index = 1; index <= retryableTopic.attempts; index++) { const retryTopicName = (0, utils_1.getRetryTopicName)(pattern, index); result.push(retryTopicName); if (index <= constants_1.RetryTopicConstants.MAX_ATTEMPTS && !currentRetryTopics.includes(retryTopicName)) { topics.push(retryTopicName); } } const deadTopicName = (0, utils_1.getDeadTopicName)(pattern); if (!currentTopics.includes(deadTopicName)) { topics.push(deadTopicName); } const autoCreateRetryTopic = (_a = retryableTopic.autoCreateRetryTopic) !== null && _a !== void 0 ? _a : constants_1.AUTO_CREATE_RETRY_TOPIC; if (autoCreateRetryTopic) { await this.admin.createTopics({ topics: topics.map((topic) => ({ topic: topic, numPartitions: constants_1.RetryTopicConstants.DEFAULT_PARTITIONS, replicationFactor: constants_1.RetryTopicConstants.REPLICATION_FACTOR, })), }); } return result; } } exports.KafkaAdmin = KafkaAdmin; //# sourceMappingURL=kafka-admin.js.map