2013-12-12 2 views
4

노드 응용 프로그램에서 node-amqp를 큐 시스템으로 사용하고 있습니다. 대기열의 상태를 모니터링하여 충분한 인력이 있는지를 파악할 수 있습니다. 즉 대기열 크기가 증가하면 우리는 뒤쳐지기 시작합니다.node-amqp를 사용하여 큐에있는 메시지 수를 얻는 방법

나는 명령 줄에서 다음과 같은 것을 사용할 수 있음을 알고있다.

rabbitmqctl list_queues 
나에게 내가 필요로하는 정확한 정보를 제공

하지만, 노드 AMQP 자체에서이 작업을 수행 어쨌든이 궁금 해서요?

미리 감사드립니다. 결국 편집

, 난 그냥이 아니 훌륭한 솔루션을 내가 필요한 정보를 얻기 위해 명령 줄 도구 rabbitmqctl을 사용하지만, 여기에 내가 무슨 짓을;

var Logger = require('arsenic-logger'); 

getQueueMeta(function(info){ 
    Logger.info(info); 
}); 

/** 
* Returns a sparse array with the queue names as the indices 
* and the number of messages as the value, e.g.; 
* 
* info = [ my-queue: 9, my-other-queue: 1 ] 
* 
* @param callback 
*/ 
function getQueueMeta(callback){ 

    var sys = require('sys') 
    var exec = require('child_process').exec; 

    exec("/usr/local/sbin/rabbitmqctl list_queues", function(error, stdout, stderr) { 

     var info = []; 

     if (!error){ 

      var lines = stdout.split(/\n/); 

      if (lines.length > 1){ 

       for (var i=1; i<lines.length-2; i++){ 
        var temp = lines[i].split(/\s/); 
        info[temp[0].trim()] = parseInt(temp[1]); 
       } 

      } 

     } 

     callback(info); 

    }); 

} 

답변

5

파티에 조금 늦을 수 있지만 앞으로이 문제를 겪는 사람이있을 경우 ... 현재 버전 node-amqp (0.2.4) 대기열을 선언 할 때 메시지 수와 현재 가입 한 사용자 수를 확인할 수 있습니다.

var connection = require("amqp").createConnection(); 
connection.exchange("exampleExchange", {/*...*/}, function(exchange) { 
    connection.queue("exampleQueue", {/*...*/}, function(queue, messageCount, consumerCount){ 
    console.log("Message count", messageCount); 
    console.log("Consumer count", consumerCount); 
    }); 
}); 
0

그래서 RabbitMQ는 AMQP를 0.9.1까지 지원합니다. 직접 here 문서를 볼 수 있습니다.

문서를 빠르게 검사하면 AMQP가 연결, 교환 및 기본 대기열/대기열에서 대기열을 제외하는 것만 포함한다는 것을 알 수 있습니다. 그러나 rabbitmqctl의 많은 기능은 AMQP 사양을 통해 액세스 할 수 없습니다. 그런 식으로 rabbitmqctl은 AMQP 연결이 기본적으로 "소비자"도구 인 "관리"도구에 훨씬 가깝습니다.

그렇다면 운이 좋을 수도 있습니다. connection.queue()method을 살펴보십시오. 그것은 그 queue 변수처럼 보이는 .NET 구현에서

var q = connection.queue('my-queue', function (queue) { 
    console.log('Queue ' + queue.name + ' is open'); 
}); 

이름뿐만 아니라 소비자와 메시지의 개수뿐만 아니라이 포함되어 있습니다. node.js에서 사용할 수있는 것이 명확하지 않은 경우 파고 들어야 할 수도 있습니다.

+0

감사, 노드 AMQP에 대한 소스 코드를보고 큐 개체를 검사하는 것은 슬프게도 어떤 메시지 나 소비자의 수는 (내가 볼 수) –

+0

예, 내가 노드 AMQP의 코드를 보았고, 그것의가 없다 채우지 않습니다. .NET과 Java 라이브러리가 데이터를 가져올 수 있다면 데이터가 존재하고 단순히 노출되지 않을 가능성이 높습니다. –

관련 문제