RabbitMQ消息神秘地消失了

时间:2014-07-14 22:35:14

标签: node.js rabbitmq

我有一个节点工作器正在等待RabbitMQ消息。今天我对它进行了一些更改,现在当我连接dev实例时,一切正常 - 它似乎连接 - 但消耗函数不会触发。消息虽然已被消耗,但仍然消失。

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 个答案:

答案 0 :(得分:0)

我在C#控制台应用程序中使用RabbitMQ客户端有同样的行为:

  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语句的结束括号,"使用"对象被处置。所以我打开它后几乎立即关闭了我的连接和通道。解决方案是将控制台线放在使用括号内:

  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中做的任何事情,但也许它会帮助其他一些沮丧的程序员。