我有最新版本的 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 ?
非常感谢任何想法或帮助