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).

41 lines 2.86 kB
/** The incoming transactional outbox or inbox message that should be stored */ export interface TransactionalMessage { /** The unique identifier of the message. This is used to ensure a message is only processed once */ id: string; /** The type of the aggregate root (in DDD context) to which this message is related */ aggregateType: string; /** The unique identifier of the aggregate */ aggregateId: string; /** The type name of the event or command */ messageType: string; /** A segment can optionally group messages which can be used to allow/optimize parallel message execution. */ segment?: string; /** This field defines if that message should be processed sequentially or if parallel processing is fine. Default is sequential. */ concurrency?: 'sequential' | 'parallel'; /** The message payload that provides the details for an event or instructions for a command */ payload: unknown; /** Optional metadata that is/was used for the actual message transfer. */ metadata?: Record<string, unknown>; /** The date and time in ISO 8601 "combined extended date and time format" UTC format (e.g. "2023-10-17T11:48:14Z") until when the message is locked (used with the polling listener) */ lockedUntil?: string | null; /** The date and time in ISO 8601 "combined extended date and time format" UTC format (e.g. "2023-10-17T11:48:14Z") when the message was created */ createdAt?: string; } /** The message when stored in the database includes processing information. */ export interface StoredTransactionalMessage extends TransactionalMessage { /** This field defines if that message should be processed sequentially or if parallel processing is fine. */ concurrency: 'sequential' | 'parallel'; /** The number of times a message was attempted to be processed. */ startedAttempts: number; /** The number of times a message was processed (successfully or with a caught error). */ finishedAttempts: number; /** The date and time in ISO 8601 "combined extended date and time format" UTC format (e.g. "2023-10-17T11:48:14Z") when the message was created */ createdAt: string; /** The date and time in ISO 8601 "combined extended date and time format" UTC format (e.g. "2023-10-17T11:48:14Z") until when the message is locked (used with the polling listener) */ lockedUntil: string; /** The date and time in ISO 8601 "combined extended date and time format" UTC format (e.g. "2023-10-17T11:48:14Z") when the message was processed */ processedAt: string | null; /** The date and time in ISO 8601 "combined extended date and time format" UTC format (e.g. "2023-10-17T11:48:14Z") when the message was abandoned due too many failed handling attempts */ abandonedAt: string | null; } //# sourceMappingURL=transactional-message.d.ts.map