RabbitMQ和node-amqp:确认模式下的Exchange无法确认 - 为什么?

Gol*_*den 6 rabbitmq node.js node-amqp

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

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

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

这非常有效.正如您所看到的,我正在使用创建交换confirm: true,因此我希望交换在之后处于确认模式.

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

var options = {};
myExchange.publish('', { data: 'foobar' }, options, function () {
  // ...
});
Run Code Online (Sandbox Code Playgroud)

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

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

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

Gol*_*den 11

在适当的GitHub问题中回答了问题:npm上的node-amqp是旧版本...当前的解决方法是直接使用masterGitHub中的分支.

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


2013年11月更新

由于我最近再次使用RabbitMQ(在我的原始问题之后大约一年),我认为最好对node-amqp的现状进行更新.

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