redis-smq
Version:
A high-performance, reliable, and scalable message queue for Node.js.
33 lines • 1.75 kB
JavaScript
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