kafka-sagas
Version:
Build sagas that consume from a kafka topic
48 lines (47 loc) • 2.37 kB
TypeScript
/// <reference types="node" />
import { Kafka, Consumer, KafkaMessage, ConsumerConfig } from 'kafkajs';
import pino from 'pino';
import TypedEmitter from 'typed-emitter';
import { ConsumerPool } from './consumer_pool';
import { ThrottledProducer } from './throttled_producer';
import { SagaContext, Saga, ILoggerConfig, Middleware, IEffectDescription, IConsumptionEvent, SagaProducerConfig, SagaConsumerConfig } from './types';
import { TopicAdministrator } from './topic_administrator';
export declare class TopicSagaConsumer<Payload, Context extends Record<string, any> = Record<string, any>> {
eventEmitter: TypedEmitter<{
comitted_offsets: (...args: any[]) => void;
started_saga: (...args: any[]) => void;
completed_saga: (...args: any[]) => void;
consumed_message: (consumptionEvent: IConsumptionEvent<Payload>) => void;
}>;
protected consumer: Consumer;
protected saga: Saga<Payload, SagaContext<Context>>;
protected topic: string;
protected getContext: (message: KafkaMessage) => Promise<Context>;
protected logger: ReturnType<typeof pino>;
protected middlewares: Array<Middleware<IEffectDescription, SagaContext<Context>>>;
protected consumerConfig: ConsumerConfig;
protected producerConfig: SagaProducerConfig;
protected consumptionTimeoutMs: number;
protected topicAdminstrator: TopicAdministrator;
protected consumerPool: ConsumerPool;
protected throttledProducer: ThrottledProducer;
protected backgroundHeartbeat?: NodeJS.Timeout;
constructor({ kafka, topic, saga, getContext, loggerConfig, middlewares, consumerConfig, producerConfig, topicAdministrator }: {
kafka: Kafka;
topic: string;
saga: Saga<Payload, SagaContext<Context>>;
consumerConfig?: Partial<SagaConsumerConfig>;
producerConfig?: Partial<SagaProducerConfig>;
getContext?: (message: KafkaMessage) => Promise<Context>;
topicAdministrator?: TopicAdministrator;
loggerConfig?: ILoggerConfig;
middlewares?: Array<Middleware<IEffectDescription, SagaContext<Context>>>;
});
/**
* Catching and crashing is left to consumers of this class
* so that they can log as they see fit.
*/
run(): Promise<void>;
disconnect(): Promise<void>;
private eachMessage;
}