kafka-retry
Version:
Handle kafka non-blocking retries and dead letter topics for nestjs microservice
44 lines • 1.84 kB
JavaScript
;
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