2014-07-14 166 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中做的任何事情类似,但也许它会帮助其他一些受挫的编码器。