UNPKG

pg-transactional-outbox

Version:

A PostgreSQL based transactional outbox and inbox pattern implementation to support exactly once message processing (with at least once message delivery).

35 lines (32 loc) 1.25 kB
import { FullPollingListenerConfig } from '../config'; /** * Define the batch size strategy how many messages should be loaded at once. */ export interface PollingListenerBatchSizeStrategy { /** * Defines the number of records that should be loaded from the database table. * @param currentlyProcessed The number of currently processed messages * @returns The max number of records to load */ (currentlyProcessed: number): Promise<number>; } /** * The default batch size strategy returns the configured value from the * `nextMessagesBatchSize`. But the first few times until the batch size is * reached it will tell to return only one message. This protects against * poisonous messages: if the full batch size would be taken during startup all * those messages would be marked as poisonous if one of them fails. */ export const defaultPollingListenerBatchSizeStrategy = ( config: FullPollingListenerConfig, ): PollingListenerBatchSizeStrategy => { let callsSinceStart = 1; return () => { let batchSize = config.settings.nextMessagesBatchSize; if (callsSinceStart <= config.settings.nextMessagesBatchSize) { batchSize = 1; callsSinceStart++; } return Promise.resolve(batchSize); }; };