@vpriem/kafka-broker
Version:
Easily compose and manage your kafka resources in one place
47 lines • 1.99 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SubscriptionContainer = void 0;
const events_1 = __importDefault(require("events"));
const Subscription_1 = require("./Subscription");
const BrokerError_1 = require("./BrokerError");
class SubscriptionContainer extends events_1.default {
kafka;
publisher;
config;
registry;
subscriptions = {};
constructor(kafka, publisher, config, registry) {
super({ captureRejections: true });
this.kafka = kafka;
this.publisher = publisher;
this.config = config;
this.registry = registry;
}
create(name) {
if (typeof this.subscriptions[name] === 'undefined') {
const subscriptionConfig = this.config[name];
if (typeof subscriptionConfig === 'undefined') {
throw new BrokerError_1.BrokerError(`Unknown subscription "${name}"`);
}
const { kafka: kafkaName, consumer: consumerConfig } = subscriptionConfig;
const consumer = this.kafka.consumer(kafkaName, consumerConfig);
this.subscriptions[name] = new Subscription_1.Subscription(consumer, this.publisher, subscriptionConfig, this.registry).on('error', (error) => {
this.emit('error', error);
});
Object.values(consumer.events).forEach((eventName) => {
consumer.on(eventName, (event) => this.emit(eventName, event));
});
}
return this.subscriptions[name];
}
async disconnect() {
const { subscriptions } = this;
this.subscriptions = {};
await Promise.all(Object.values(subscriptions).map((subscription) => subscription.disconnect()));
}
}
exports.SubscriptionContainer = SubscriptionContainer;
//# sourceMappingURL=SubscriptionContainer.js.map