RabbitMQ - 等待承诺的响应

时间:2018-06-02 16:52:14

标签: javascript node.js promise async-await rabbitmq

尝试使用 async / await 语法从发布商使用消费者请求。 E.g:

await makeRequest(ch, queueName, cbQueueName, message)

// ...

const makeRequest = (ch, queueName, cbQueueName, message) => {

 let corr = generateUuid();

 return new Promise(resolve => {

  ch.sendToQueue(this.loadQueueName, new Buffer(prGuid), { correlationId: corr, replyTo: cbQueueName});

  const prID = getprid();
  console.log("Call from promise #" + prID);
  ch.consume(cbQueueName, function(msg) {
    console.log("Response to promise #" + prID);

    if (msg.properties.correlationId == corr) {
      console.log(msg.content.toString());
      resolve();
    }
  }, {noAck: true})
 });
}

let i = 0;

const getprid = () => {
 i++; 
 return i;
}

问题是消费者的响应是绝对随机的 Promise 实例。所以第一次调用工作正常,因为没有其他实例可以混用。在第一次回答之前定义的随机承诺实例后,消费者会得到响应。由于已发布消息中的 correlationId 与响应中的 correlationId 不同,因此在首次调用后,resolve方法永远不会触发。

是否有办法阻止消费者对完全 承诺 的反应?请求是否已被发布?或者这是一个不错的方法来自beginnig?

Basicaly我需要使用参数向消费者发送消息,并等待它使用 async / await 进行响应。

0 个答案:

没有答案