2014-01-10 92 views
2

(我正在使用node-amqp和rabbitmq服務器。)爲什麼node-amqp出現問題時會「關閉」事件?

我想知道爲什麼如果出現錯誤,我有一個關閉事件。例如,如果我嘗試打開與隊列的連接(具有錯誤的參數),則會收到錯誤事件。這是完美的。

但是,在發生任何錯誤之後,我也會收到一個關閉連接(在這種情況下,可能是因爲關閉失敗的套接字到隊列)。之後,自動重新連接,我收到(初始)準備好的事件。

問題:

connection.on('ready', function() { 
do_a_lot_of_things 

}).on(error, function(error){ 
solve_the_problem 
}); 

,如果出現錯誤,我收到了錯誤,但隨後「準備就緒」事件,它會重新do_a_lot_of_things。我的方法錯了嗎?

問候

+0

我認爲原因是當你試圖創建一個隊列(錯誤的配置)到rabbitmq這個emmit和錯誤之後,它關閉了連接。 之後,node-amqp進行重新連接(如果以此方式配置)。如果連接成功就緒事件再次發生並且do_a_lot_of_things再次完成。 – jgato

回答

2

您可以使用connection.once('ready', function() { … })(見the documentation),這將只在第一個事件執行處理。

+0

這似乎很好解決我目前的問題。但是,爲什麼我會收到這個關閉/準備好的序列?例如,如果發生了一些非常重要的事情:兔子服務器發生故障,那麼我想知道它何時再次收到「準備就緒」事件。因此,我可以對此作出反應。 – jgato

+0

(我不熟悉node-ampq模塊)。您還可以添加第二個偵聽器,使用'.on('ready')'來對這些事件做出反應。 –

相關問題