为什么amqplib消耗函数的nodejs是闭包?

时间:2017-12-15 03:25:57

标签: javascript node.js amqp node-amqp node-amqplib

我使用nodejs amqplib模块连接rabbitmq。 我发现消费函数已成为一个闭包函数,但我无法理解为什么。我没有使用封闭。

我的代码如下。我发现returnOK中的corr仍然是第一次获得值。当我第二次发射此功能时。 corr仍然是第一次的价值。 我觉得这很奇怪。有人可以解释一下吗?

  const corr = new Date().getTime();
  try {
    const params = JSON.stringify(req.body);
    console.log('corr first =', corr);
    await ch.sendToQueue(q, Buffer.from(params), {
      deliveryMode: true,
      correlationId: corr.toString(),
      replyTo: queue.queue,
    });

    const returnOK = (msg) => {
      if (msg.properties.correlationId === corr.toString()) {
        console.info('******* Proxy send message done *******');
        res.status(HTTPStatus.OK).json('Done');
      }
    };
    await ch.consume(queue.queue, returnOK, { noAck: true });
  } catch (error) {
    res.status(HTTPStatus.INTERNAL_SERVER_ERROR).json(error);
  }

1 个答案:

答案 0 :(得分:0)

您似乎在每次请求时都在调用ch.consume,实际上每次都会创建一个新的消费者。你应该只做一次。

发生的事情是第一个消费者正在接收消息。

要解决此问题,您可能希望将ch.consume移到请求处理程序之外。