我有一个主题交换,我正在测试用户测试用例,如果发生错误则发送错误确认。
ch.bindQueue(q.queue, ex, ‘key’);
ch.consume(q.queue, async (msg) => {
console.log(" Sub: [x] %s:'%s'", msg.fields.routingKey, msg.content.toString());
const eventInfo = JSON.parse( msg.content.toString());
try
{
throw ‘error occurred’;
}catch(err) {
ch.nack(‘error occurred’);
}
}, {noAck: true});
});
它返回以下错误:
(node:550)UnhandledPromiseRejectionWarning:未处理的承诺 rejection(拒绝id:1):TypeError:无法读取属性 未定义的'deliveryTag'
有人可以提出可能出错的地方吗?
答案 0 :(得分:1)
我们应该拒绝该消息,并且不要将字符串传递给nack
方法:
ch.bindQueue(q.queue, ex, ‘key’);
ch.consume(q.queue, async (msg) => {
console.log(" Sub: [x] %s:'%s'", msg.fields.routingKey, msg.content.toString());
const eventInfo = JSON.parse( msg.content.toString());
try
{
throw ‘error occurred’;
}catch(err) {
ch.nack(msg); // <----------------
}
}, {noAck: false}); // <----------------
});
请注意,使用nack
会将消息再次放入队列,而ack
不会...
希望对您有帮助, 蒂埃里