redis-smq
Version:
A high-performance, reliable, and scalable message queue for Node.js.
63 lines • 4.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MessageBrowserFactory = void 0;
const redis_smq_common_1 = require("redis-smq-common");
const index_js_1 = require("../queue-manager/index.js");
const message_browser_js_1 = require("./message-browser/message-browser.js");
const index_js_2 = require("../message-manager/index.js");
const browser_storage_sorted_set_js_1 = require("./message-browser/browser-storage/browser-storage-sorted-set.js");
const browser_storage_list_js_1 = require("./message-browser/browser-storage/browser-storage-list.js");
const index_js_3 = require("./types/index.js");
const with_shared_pool_connection_js_1 = require("../common/redis/redis-connection-pool/with-shared-pool-connection.js");
const _get_queue_properties_js_1 = require("../queue-manager/_/_get-queue-properties.js");
class MessageBrowserFactory {
static createPendingMessagesBrowser(queueType, messageType, logger) {
const messageManager = new index_js_2.MessageManager();
switch (queueType) {
case index_js_1.EQueueType.PRIORITY_QUEUE:
return new message_browser_js_1.MessageBrowser(messageManager, new browser_storage_sorted_set_js_1.BrowserStorageSortedSet(logger), messageType, 'keyQueuePriority', true, logger);
case index_js_1.EQueueType.LIFO_QUEUE:
case index_js_1.EQueueType.FIFO_QUEUE:
return new message_browser_js_1.MessageBrowser(messageManager, new browser_storage_list_js_1.BrowserStorageList(logger), messageType, 'keyQueuePending', true, logger);
default:
throw new Error(`Unsupported queue type: ${queueType}`);
}
}
static createBrowserForQueueType(messageType, queueType, logger) {
const messageManager = new index_js_2.MessageManager();
switch (messageType) {
case index_js_3.EQueueMessageType.PUBLISHED:
return new message_browser_js_1.MessageBrowser(messageManager, new browser_storage_list_js_1.BrowserStorageList(logger), messageType, 'keyQueuePublished', false, logger);
case index_js_3.EQueueMessageType.SCHEDULED:
return new message_browser_js_1.MessageBrowser(messageManager, new browser_storage_sorted_set_js_1.BrowserStorageSortedSet(logger), messageType, 'keyQueueScheduled', false, logger);
case index_js_3.EQueueMessageType.PENDING:
return this.createPendingMessagesBrowser(queueType, messageType, logger);
case index_js_3.EQueueMessageType.ACKNOWLEDGED:
return new message_browser_js_1.MessageBrowser(messageManager, new browser_storage_list_js_1.BrowserStorageList(logger), messageType, 'keyQueueAcknowledged', false, logger);
case index_js_3.EQueueMessageType.DEAD_LETTERED:
return new message_browser_js_1.MessageBrowser(messageManager, new browser_storage_list_js_1.BrowserStorageList(logger), messageType, 'keyQueueDeadLetter', false, logger);
default:
throw new Error(`Unsupported message type: ${messageType}`);
}
}
static createBrowserForQueue(queue, messageType, logger, cb) {
(0, with_shared_pool_connection_js_1.withSharedPoolConnection)((client, callback) => {
(0, _get_queue_properties_js_1._getQueueProperties)(client, queue, (err, properties) => {
if (err)
return callback(err);
if (!properties)
return callback(new redis_smq_common_1.CallbackEmptyReplyError());
try {
const browser = this.createBrowserForQueueType(messageType, properties.queueType, logger);
callback(null, browser);
}
catch (error) {
const err = error instanceof Error ? error : new Error(String(error));
callback(err);
}
});
}, cb);
}
}
exports.MessageBrowserFactory = MessageBrowserFactory;
//# sourceMappingURL=message-browser-factory.js.map