6

我正在编写一个依赖于 RabbitMQ 的 Node.js 应用程序。我使用 node-amqp 作为连接到 RabbitMQ 的首选库。

一旦我建立了与 RabbitMQ 的连接,我要做的第一件事就是创建一个交换:

var options = { autoDelete: false, confirm: true, durable: true, type: 'direct' };
connection.exchange('myExchange', options, function (myExchange) {
  // ...
});

这完美地工作。如您所见,我正在使用创建交换confirm: true,因此我希望交换之后处于确认模式。

现在,一旦我尝试发布消息,就会出现问题:

var options = {};
myExchange.publish('', { data: 'foobar' }, options, function () {
  // ...
});

问题是publish函数的回调从未被调用——尽管消息已成功发布(正如我在 RabbitMQ 的 Web 管理工具中看到的那样)。

我是否以错误的方式理解确认模式?这是 node-amqp 的错误吗?

任何帮助,将不胜感激 :-)

4

1 回答 1

11

在相应的GitHub 问题中回答的问题:npm 上的 node-amqp 是旧版本...当前的解决方法是直接使用master来自 GitHub 的分支。

这意味着,https://github.com/postwait/node-amqp/tarball/master在安装时使用npm.


2013 年 11 月更新

由于这些天我再次使用 RabbitMQ(大约在我最初提出问题的一年后),我认为更新 node-amqp 的现状可能是个好主意。

不幸的是,node-amqp 的状态与一年前完全相同:npm 发布的版本几乎无法使用。我一年前遇到的一些错误仍然存​​在(包括我的问题中的错误),因此给定的解决方法仍然有效:从 GitHub 获取最新的大师。

于 2012-10-04T18:15:46.573 回答