UNPKG

redis-smq

Version:

A high-performance, reliable, and scalable message queue for Node.js.

33 lines 1.75 kB
import { async, withWatchTransaction, } from 'redis-smq-common'; import { redisKeys } from '../../common/redis/redis-keys/redis-keys.js'; import { EExchangeProperty, } from '../types/index.js'; import { ExchangeAlreadyExistsError } from '../../errors/index.js'; export function _saveExchange(client, exchangeParams, exchangeQueuePolicy, cb) { const { keyExchanges } = redisKeys.getMainKeys(); const { keyNamespaceExchanges } = redisKeys.getNamespaceKeys(exchangeParams.ns); const { keyExchange } = redisKeys.getExchangeKeys(exchangeParams.ns, exchangeParams.name); withWatchTransaction(client, (client, watch, done) => { async.waterfall([ (cb1) => watch([keyExchange, keyExchanges, keyNamespaceExchanges], cb1), (_, cb1) => client.hget(keyExchange, String(EExchangeProperty.TYPE), (err, reply) => { if (err) return cb1(err); if (reply) return cb1(new ExchangeAlreadyExistsError()); cb1(); }), (_, cb1) => { const typeField = String(EExchangeProperty.TYPE); const queuePolicyField = String(EExchangeProperty.QUEUE_POLICY); const exchangeStr = JSON.stringify(exchangeParams); const multi = client.multi(); multi.hset(keyExchange, typeField, exchangeParams.type); multi.hset(keyExchange, queuePolicyField, Number(exchangeQueuePolicy)); multi.sadd(keyExchanges, exchangeStr); multi.sadd(keyNamespaceExchanges, exchangeStr); cb1(null, { multi }); }, ], done); }, (err) => cb(err)); } //# sourceMappingURL=_save-exchange.js.map