我有最新版本的nodejs(0.10.21,amqplib(0.1.0)(https://github.com/squaremo/amqp.node.git)和rabbitmq(3.2.0)。
报道:
[x] Sent 'Hello World!'
从rabbitmq Web控制台,我可以看到它创建了连接,它创建了队列'hello'。但是,它实际上不会将任何消息发布到队列。
除了RPC客户端/服务器之外,其他任何教程都不适用于我 - 他们将创建交换,队列和通道,但不会发布消息。
我的一位朋友使用除了OS X 10.6而不是10.8之外的所有相同版本都运行良好。
我使用节点检查器逐步执行了amqplib代码,但看不到任何明显的错误。它确实看起来没有创建消息框架,但在那个级别我不知道目前发生了什么。
当我通过Web控制台或Bunny + Ruby发布消息时,它会创建一个队列并按预期发布消息,因此它必须是node,amqp和/或OS X 10.8而不是rabbitmq的一些问题。
rabbitmq日志(拖尾两个日志)只提到连接打开然后很快关闭,但没有报告任何错误:
=INFO REPORT==== 27-Oct-2013::20:46:16 === accepting AMQP connection <0.731.0> (127.0.0.1:56927 -> 127.0.0.1:5672)
=INFO REPORT==== 27-Oct-2013::20:46:16 ===
closing AMQP connection <0.731.0> (127.0.0.1:56927 -> 127.0.0.1:5672)
我嗅到了从amqp节点发送到rabbitmq的数据包。这来自amqp.node运行示例/教程中的第一个示例'send.js':
http://www.limorph.com/files/amqp_amqnode_send.txt
您可以看到它如何打开连接,创建队列并关闭连接,但不会发送消息。
这个来自ruby / bunny - 您可以看到它如何打开连接,创建队列以及发布消息。
http://www.limorph.com/files/amqp_bunny.txt
我发现如果删除conn.close(),它会设法发布消息。
例如
})).ensure(function() {
// conn.close();
});;
不是一个真正的解决方案,但是它指出问题可能在'何时'而不是amqplib?
任何想法或帮助非常感谢
答案 0 :(得分:0)
简短的回答是:关闭连接会放弃所有尚未写入套接字的操作。
似乎更新版本的when.js(例如,v2.5.1)在写入消息之前设法调用ensure子句,关闭连接。
或许奇怪的是,它是如此一致 - 我没有看到它成功使用when.js 2.5.1并且我没有看到它因when.js 2.1.1而失败。在任何情况下,修复它的方法是在发布后同步某事;例如,关闭频道。
有更多细节答案 1 :(得分:0)
这是因为我运行'npm install'而不是'npm install amqplib'或'npm install ../ ..'。这意味着我正在运行版本2.5.1的'when',它有某种故障的竞争条件,过早地关闭了连接。当运行版本2.1.1,amqplib被锁定,它工作正常。 -