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

32 lines 1.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createReplicationSegmentMutexConcurrencyController = void 0; const async_mutex_1 = require("async-mutex"); const mutexMap = new Map(); /** * Use multiple mutex controllers - one for every unique segment of the messages * @returns The controller to acquire and release the mutex for a specific segment */ const createReplicationSegmentMutexConcurrencyController = () => { return { /** Acquire a lock (if any) and return a function to release it. */ acquire: (message) => { let mutex = mutexMap.get(message.segment); if (mutex) { return mutex.acquire(); } mutex = new async_mutex_1.Mutex(); mutexMap.set(message.segment, mutex); return mutex.acquire(); }, /** Cancel all pending locks. */ cancel: () => { for (const mutex of mutexMap.values()) { mutex.cancel(); } mutexMap.clear(); }, }; }; exports.createReplicationSegmentMutexConcurrencyController = createReplicationSegmentMutexConcurrencyController; //# sourceMappingURL=create-segment-mutex-concurrency-controller.js.map