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
TypeScript
/** 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