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).
21 lines (19 loc) • 845 B
text/typescript
import { DatabaseClient } from '../common/database';
import { ListenerConfig } from '../common/listener-config';
import { StoredTransactionalMessage } from './transactional-message';
/**
* Does increase the finished_attempts count by one.
* @param message The message to NOT acknowledge.
* @param client The database client. Must be part of the transaction where the message handling changes are done.
* @param config The configuration settings that defines the database schema.
*/
export const increaseMessageFinishedAttempts = async (
{ id }: StoredTransactionalMessage,
client: DatabaseClient,
{ settings }: Pick<ListenerConfig, 'settings'>,
): Promise<void> => {
await client.query(
/* sql */ `UPDATE ${settings.dbSchema}.${settings.dbTable} SET finished_attempts = finished_attempts + 1 WHERE id = $1;`,
[id],
);
};