redis-smq
Version:
A high-performance, reliable, and scalable message queue for Node.js.
36 lines • 1.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports._saveExchange = _saveExchange;
const redis_smq_common_1 = require("redis-smq-common");
const redis_keys_js_1 = require("../../common/redis/redis-keys/redis-keys.js");
const index_js_1 = require("../types/index.js");
const index_js_2 = require("../../errors/index.js");
function _saveExchange(client, exchangeParams, exchangeQueuePolicy, cb) {
const { keyExchanges } = redis_keys_js_1.redisKeys.getMainKeys();
const { keyNamespaceExchanges } = redis_keys_js_1.redisKeys.getNamespaceKeys(exchangeParams.ns);
const { keyExchange } = redis_keys_js_1.redisKeys.getExchangeKeys(exchangeParams.ns, exchangeParams.name);
(0, redis_smq_common_1.withWatchTransaction)(client, (client, watch, done) => {
redis_smq_common_1.async.waterfall([
(cb1) => watch([keyExchange, keyExchanges, keyNamespaceExchanges], cb1),
(_, cb1) => client.hget(keyExchange, String(index_js_1.EExchangeProperty.TYPE), (err, reply) => {
if (err)
return cb1(err);
if (reply)
return cb1(new index_js_2.ExchangeAlreadyExistsError());
cb1();
}),
(_, cb1) => {
const typeField = String(index_js_1.EExchangeProperty.TYPE);
const queuePolicyField = String(index_js_1.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