'when-js'或基本的amqplib rabbitmq nodejs教程无效

时间:2013-10-27 10:55:15

标签: node.js rabbitmq amqp when-js

我有最新版本的nodejs(0.10.21,amqplib(0.1.0)(https://github.com/squaremo/amqp.node.git)和rabbitmq(3.2.0)。

  1. 启动rabbitmq-server
  2. 转到amqp.node / examples / tutorials并在安装npm软件包后运行./send.js。
  3. 报道:     [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?

    任何想法或帮助非常感谢

2 个答案:

答案 0 :(得分:0)

简短的回答是:关闭连接会放弃所有尚未写入套接字的操作。

似乎更新版本的when.js(例如,v2.5.1)在写入消息之前设法调用ensure子句,关闭连接。

或许奇怪的是,它是如此一致 - 我没有看到它成功使用when.js 2.5.1并且我没有看到它因when.js 2.1.1而失败。在任何情况下,修复它的方法是在发布后同步某事;例如,关闭频道。

https://github.com/squaremo/amqp.node/issues/28

有更多细节

答案 1 :(得分:0)

这是因为我运行'npm install'而不是'npm install amqplib'或'npm install ../ ..'。这意味着我正在运行版本2.5.1的'when',它有某种故障的竞争条件,过早地关闭了连接。当运行版本2.1.1,amqplib被锁定,它工作正常。 -

相关问题