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

45 lines 2.77 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createReplicationMultiConcurrencyController = void 0; const create_full_concurrency_controller_1 = require("./create-full-concurrency-controller"); const create_mutex_concurrency_controller_1 = require("./create-mutex-concurrency-controller"); const create_segment_mutex_concurrency_controller_1 = require("./create-segment-mutex-concurrency-controller"); const create_semaphore_concurrency_controller_1 = require("./create-semaphore-concurrency-controller"); /** * Use different mutex controllers depending on the desired concurrency level * for different messages. If a semaphore concurrency controller should be used, * the `maxSemaphoreParallelism` should be set. * @param getConcurrencyType Implements the logic which concurrency controller should be used e.g. based on the aggregate and message type * @returns The controller to acquire and release the mutex */ const createReplicationMultiConcurrencyController = (getConcurrencyType, settings) => { var _a; const fullConcurrencyController = (0, create_full_concurrency_controller_1.createReplicationFullConcurrencyController)(); const mutexController = (0, create_mutex_concurrency_controller_1.createReplicationMutexConcurrencyController)(); const segmentMutexController = (0, create_segment_mutex_concurrency_controller_1.createReplicationSegmentMutexConcurrencyController)(); const semaphore = (0, create_semaphore_concurrency_controller_1.createReplicationSemaphoreConcurrencyController)((_a = settings === null || settings === void 0 ? void 0 : settings.maxSemaphoreParallelism) !== null && _a !== void 0 ? _a : 5); return { /** Acquire a lock (if any) and return a function to release it. */ acquire: (message) => { switch (getConcurrencyType(message)) { case 'full-concurrency': return fullConcurrencyController.acquire(message); case 'mutex': return mutexController.acquire(message); case 'semaphore': return semaphore.acquire(message); case 'segment-mutex': return segmentMutexController.acquire(message); } }, /** Cancel all controllers. */ cancel: () => { fullConcurrencyController.cancel(); mutexController.cancel(); segmentMutexController === null || segmentMutexController === void 0 ? void 0 : segmentMutexController.cancel(); semaphore.cancel(); }, }; }; exports.createReplicationMultiConcurrencyController = createReplicationMultiConcurrencyController; //# sourceMappingURL=create-multi-concurrency-controller.js.map