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).
28 lines • 1.71 kB
TypeScript
import { DatabaseClient } from '../common/database';
import { ExtendedError } from '../common/error';
import { StoredTransactionalMessage } from '../message/transactional-message';
/**
* Message handler for handling all aggregate types and message types.
*/
export interface GeneralMessageHandler {
/**
* Custom business logic to handle a message that was stored in the
* transactional table. It is fine to throw an error if the message cannot be
* processed.
* @param message The message with the payload to handle.
* @param client The database client that is part of a transaction to safely handle the message.
* @throws If something failed and the message should NOT be acknowledged - throw an error.
*/
handle: (message: StoredTransactionalMessage, client: DatabaseClient) => Promise<void>;
/**
* Custom (optional) business logic to handle an error that was caused by the
* "handle" method. It is advised to not throw errors in this function for
* most consistent error handling.
* @param error The error that was thrown in the handle method.
* @param message The message with the payload that was attempted to be handled. The finishedAttempts property includes the number of processing attempts - including the current one if DB retries management is activated.
* @param client The database client that is part of a (new) transaction to safely handle the error.
* @param retry True if the message should be retried again.
*/
handleError?: (error: ExtendedError, message: StoredTransactionalMessage, client: DatabaseClient, retry: boolean) => Promise<void>;
}
//# sourceMappingURL=general-message-handler.d.ts.map