【问题标题】:AMQP warning: possible EventEmitter memory leak detected. 11 listeners added.AMQP 警告:检测到可能的 EventEmitter 内存泄漏。增加了 11 位听众。
【发布时间】:2013-09-13 16:07:37
【问题描述】:

我在 Node.js 中收到以下错误,我认为它与 AMQP 有关。

(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
    at Connection.EventEmitter.addListener (events.js:160:15)
    at Connection.EventEmitter.once (events.js:179:8)
    at Connection.connect (/var/www/project/app/node_modules/amqp/amqp.js:1084:8)
    at Connection.reconnect (/var/www/project/app/node_modules/amqp/amqp.js:1049:8)
    at null._onTimeout (/var/www/project/app/node_modules/amqp/amqp.js:886:16)
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)

谁能指出问题所在?

这是我用来连接的模块中的代码:

JackRabbit.prototype.subscribe = function subscribe(recievedCB, routingKey) {
    var self = this;
    var route = routingKey || '#';

    self.createConnection(function(rabbitMq, ex, q) {
        // Catch all messages
        q.bind(self.config.exchangeName, route);

        // Receive messages
        q.subscribe(self.config.messageOptions, function(msg, headers, deliveryInfo) {            
            recievedCB(q, msg, headers, deliveryInfo);

            // Clsoe connection
            //rabbitMq.end();
        });        
    });
}

这里是我调用该方法的地方:

var scrapRequestRecieved = function(q, msg, headers, deliveryInfo) {
    console.log("SC msg: %j", msg);

    /** Callback function shifts the completed job from the queue. */
    phantom.scrapeUrls(msg.urls, function() {
        console.log("SC DONE");
        q.shift();
    });
};
rabbit.subscribe(scrapRequestRecieved, "sc.#");

【问题讨论】:

    标签: node.js rabbitmq amqp node-amqp


    【解决方案1】:

    经过一番搜索,问题似乎是由 AMPQ 的旧连接逻辑引起的。每次尝试重新连接时,都会添加一个新的侦听器,而不会删除旧的侦听器。该问题已在 this 拉取请求中得到修复。

    【讨论】:

    • 我很确定我拥有最新最好的 node-amqp 版本,但是我看到他们在自述文件中添加了更好的文档,所以我在他们的 github 上浏览我所做的事情错误的。谢谢!
    • 您也可以查看node_modules中的文件,看看您安装的模块是否安装了某个补丁。
    • 我最终做的是重启rabbitmq服务。我已经更改了它正在运行的端口,我认为这让它变得异常。它确实让我注意到一个错字没有设置应该设置的东西,但这是一个队列错误配置。
    【解决方案2】:

    最后一个版本0.1.8 包含了@hexacyanide 标注的拉取请求。

    【讨论】:

      猜你喜欢
      • 2012-12-08
      • 2012-09-04
      • 2014-01-03
      • 2016-06-12
      • 1970-01-01
      • 2016-10-08
      • 2016-05-05
      • 2021-03-13
      • 1970-01-01
      相关资源
      最近更新 更多