【发布时间】:2013-11-06 04:34:24
【问题描述】:
我有最新版本的nodejs(0.10.21,amqplib(0.1.0)(https://github.com/squaremo/amqp.node.git)和rabbitmq(3.2.0)。
- 启动rabbitmq-server
- 安装 npm 包后转到 amqp.node/examples/tutorials 并运行 ./send.js。
它报告:
[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 中?
非常感谢任何想法或帮助
【问题讨论】:
-
这是因为我运行了 'npm install' 而不是 'npm install amqplib' 或 'npm install ../..' 。这意味着我正在运行 2.5.1 版的“何时”,它有某种故障竞争条件,会过早关闭连接。当运行 amqplib 锁定的 2.1.1 版本时,它工作正常。
标签: node.js rabbitmq amqp when-js