AMPQ:TypeError:无法读取undefined的属性'deliveryTag'

时间:2018-03-27 22:37:06

标签: node.js rabbitmq

我有一个主题交换,我正在测试用户测试用例,如果发生错误则发送错误确认。

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'

Referring doc

有人可以提出可能出错的地方吗?

1 个答案:

答案 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不会...

希望对您有帮助, 蒂埃里