我正在编写一个依赖于RabbitMQ的Node.js应用程序。我使用node-amqp作为连接RabbitMQ的首选库。
一旦我建立了与RabbitMQ的连接,我要做的第一件事就是创建一个exchange:
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的bug吗?
任何帮助都将不胜感激:-)
发布于 2012-10-05 02:15:47
在相应的GitHub issue中回答的问题: npm上的node-amqp是旧版本...当前的解决方法是直接使用GitHub中的master分支。
这意味着,在使用npm进行安装时使用https://github.com/postwait/node-amqp/tarball/master。
更新2013年11月
因为这些天我又在使用RabbitMQ (大约在我最初的问题一年后),我想更新一下node-amqp的现状可能是个好主意。
不幸的是,node-amqp的状态与一年前完全相同: npm发布的版本很难使用。我一年前遇到的一些bug仍然存在(包括我问题中的那个),所以给定的解决方法仍然有效:从GitHub获取最新的主控程序。
https://stackoverflow.com/questions/12662413
复制相似问题