@golevelup/nestjs-rabbitmq
Version:
Badass RabbitMQ addons for NestJS
68 lines • 2.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.forceDeleteAssertQueueErrorHandler = exports.defaultAssertQueueErrorHandler = exports.getHandlerForLegacyBehavior = exports.defaultNackErrorHandler = exports.requeueErrorHandler = exports.ackErrorHandler = exports.MessageHandlerErrorBehavior = void 0;
const rabbitmq_constants_1 = require("../rabbitmq.constants");
var MessageHandlerErrorBehavior;
(function (MessageHandlerErrorBehavior) {
MessageHandlerErrorBehavior["ACK"] = "ACK";
MessageHandlerErrorBehavior["NACK"] = "NACK";
MessageHandlerErrorBehavior["REQUEUE"] = "REQUEUE";
})(MessageHandlerErrorBehavior = exports.MessageHandlerErrorBehavior || (exports.MessageHandlerErrorBehavior = {}));
/**
* An error handler that will ack the message which caused an error during processing
*/
const ackErrorHandler = (channel, msg) => {
for (const m of Array.isArray(msg) ? msg : [msg]) {
channel.ack(m);
}
};
exports.ackErrorHandler = ackErrorHandler;
/**
* An error handler that will nack and requeue a message which created an error during processing
*/
const requeueErrorHandler = (channel, msg) => {
for (const m of Array.isArray(msg) ? msg : [msg]) {
channel.nack(m, false, true);
}
};
exports.requeueErrorHandler = requeueErrorHandler;
/**
* An error handler that will nack a message which created an error during processing
*/
const defaultNackErrorHandler = (channel, msg) => {
for (const m of Array.isArray(msg) ? msg : [msg]) {
channel.nack(m, false, false);
}
};
exports.defaultNackErrorHandler = defaultNackErrorHandler;
const getHandlerForLegacyBehavior = (behavior) => {
switch (behavior) {
case MessageHandlerErrorBehavior.ACK:
return exports.ackErrorHandler;
case MessageHandlerErrorBehavior.REQUEUE:
return exports.requeueErrorHandler;
default:
return exports.defaultNackErrorHandler;
}
};
exports.getHandlerForLegacyBehavior = getHandlerForLegacyBehavior;
/**
* Just rethrows the error
*/
const defaultAssertQueueErrorHandler = (channel, queueName, queueOptions, error) => {
throw error;
};
exports.defaultAssertQueueErrorHandler = defaultAssertQueueErrorHandler;
/**
* Tries to delete the queue and to redeclare it with the provided options
*/
const forceDeleteAssertQueueErrorHandler = async (channel, queueName, queueOptions, error) => {
if (error.code == rabbitmq_constants_1.PRECONDITION_FAILED_CODE) {
await channel.deleteQueue(queueName);
const { queue } = await channel.assertQueue(queueName, queueOptions);
return queue;
}
throw error;
};
exports.forceDeleteAssertQueueErrorHandler = forceDeleteAssertQueueErrorHandler;
//# sourceMappingURL=errorBehaviors.js.map