RabbitMQ和node-amqp:在确认模式下交换不确认 – 为什么?

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

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

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

这完美的作品。 正如你所看到的,我使用confirm: true来创build交换,因此我期望交换在之后处于确认模式。

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

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

问题是publish函数的callback从来没有被调用 – 虽然这个消息已经成功发布了(正如我在RabbitMQ的webpipe理工具中看到的那样)。

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

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

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

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


2013年11月更新

正如我最近再次使用RabbitMQ(大约在我原来的问题后的一年),我认为对node-amqp的现状进行更新可能是个好主意。

不幸的是,node-amqp的状态与一年前完全一样:从npm发布的版本几乎不可用。 我在一年前遇到的一些错误仍然存​​在(包括我的问题),所以给定的解决方法仍然有效:从GitHub获取最新的主机。