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

时间:2012-09-30 15:27:00

标签: node.js rabbitmq 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) {
  // ...
});

这完美无缺。正如您所看到的,我正在使用confirm: true创建交换,因此我希望交换在之后处于确认模式。

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

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

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

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

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

1 个答案:

答案 0 :(得分:11)

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

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


2013年11月更新

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

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