2013-10-27 35 views
2

我有最新版本的NodeJS(0.10.21,amqplib(0.1.0)(https://github.com/squaremo/amqp.node.git)和RabbitMQ的(3.2.0)。是 '時,JS' 或基本amqplib的RabbitMQ教程的NodeJS不工作

  1. 開始的RabbitMQ服務器
  2. 去amqp.node /例子/教程和安裝NPM包後運行./send.js

它報告: [x] Sent 'Hello World!'

從rabbitmq Web控制檯中,我可以看到它創建連接,它創建隊列'hello'。但是,它實際上並不向隊列發佈任何消息。

除RPC客戶端/服務器外,其他教程都不適用於我,它們將創建交換,隊列和通道,但不會發布消息。

我的一個朋友使用所有相同的版本運行正常,除了OS X 10.6,而不是10.8。

我已經使用節點檢查器遍歷了amqplib代碼,並且看不到任何明顯的錯誤。它確實看起來像消息框架沒有被創建,但在那個層面上,我不知道目前發生了什麼。

當我通過Web控制檯或使用Bunny + Ruby發佈消息時,它會創建一個隊列並按預期發佈消息,因此它必須與節點,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

這是因爲我運行'npm install'而不是'npm install amqplib'或'npm install ../ ..'。這意味着我正在運行'when'的2.5.1版本,該版本有一些故障競爭條件,會過早關閉連接。當運行版本2.1.1時,amqplib被鎖定,它工作正常。 –

回答

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

0

,這是因爲我已經跑「故宮安裝」而不是「故宮安裝amqplib」或「故宮安裝../ ..」。這意味着我正在運行'when'的2.5.1版本,該版本有一些故障競爭條件,會過早關閉連接。當運行版本2.1.1時,amqplib被鎖定,它工作正常。 -