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
JavaScript
;
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