2014-07-14 208 views
1

我有一個節點工作者正在等待RabbitMQ消息。今天我對它做了一些改變,現在當我連接開發實例時,一切正常 - 它似乎連接 - 但是然後消耗功能不會觸發。消息仍然消失,儘管他們已經被消耗。RabbitMQ消息神祕消失

Rabbit.queue('consume', function (q) { 
    q.bind('consume'); 

    // This fires 
    console.log('Listening to queue...'); 
    q.subscribe(function (message) { 

     // This doesn't fire but message gets removed from queue 
     console.log(message); 
     init(message); 
    }); 
}); 
+1

您確定沒有其他進程正在使用這些消息嗎?你有沒有檢查管理插件,看看發生了什麼? –

+1

它總是在發生嗎?或只是在沉重的負荷下?可能是因爲問題你找到了解決方案嗎?也將有助於知道你使用什麼庫,amqp,amqplib,... – Michael

回答

0

我不得不使用RabbitMQ的客戶在C#控制檯應用程序此相同的行爲:最後兩行

using (var connection = factory.CreateConnection()) 
    { 
    using (var channel = connection.CreateModel()) 
    { 
     //Various RabbitMQ client magic that doesn't work 
    } 
    } 
    Console.WriteLine(" Press [enter] to exit."); 
    Console.ReadLine(); 

注意。他們保持控制檯打開並運行。否則,應用程序將立即關閉。問題是我把這兩行代碼放在using語句之外。一旦你通過using語句的結束括號,就會拋棄「used」對象。所以我打開它們後幾乎立即關閉了我的連接和通道。解決的辦法是把控制檯線內使用括號:

using (var connection = factory.CreateConnection()) 
    { 
    using (var channel = connection.CreateModel()) 
    { 
     //Various RabbitMQ client magic that astounds and amazes 

     Console.WriteLine(" Press [enter] to exit."); 
     Console.ReadLine(); 
    } 
    } 

明顯的,瑣碎的,一旦你看到它,但我浪費在這一個小時。我不知道這是否與你在NodeJS中做的任何事情類似,但也許它會幫助其他一些受挫的編碼器。