如何使用node-amqp获取队列中的消息数量

我在节点应用程序中使用node-amqp作为排队系统。 我希望能够监视队列的状态,以确定是否有足够的工作人员正在运行,即如果队列大小正在增加,我们知道我们已经开始落后了。

我知道,从命令行你可以使用类似的东西;

rabbitmqctl list_queues 

这给了我需要的确切信息,但是我想知道是否有任何方法可以从node-amqp本身执行此操作?

提前致谢。

编辑

最后,我只是使用命令行工具rabbitmqctl来获取我需要的信息,这不是一个很好的解决scheme,但这是我做的;

 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, eg; * * 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); }); } 

我可能会晚一点,但是如果有人在将来遇到这个问题…在当前版本的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); }); }); 

所以RabbitMQ支持最高0.9.1的AMQP。 你可以直接在这里看到文档。

通过文档快速浏览将显示,AMQP只涵盖连接,交stream和基本排队/出列等事情。 但是, rabbitmqctl中的许多function根本无法通过AMQP规范访问。 通过这种方式, rabbitmqctl更接近于“pipe理”工具,其中AMQP连接基本上是“消费者”工具。

这表明,你可能会很幸运。 看看connection.queue() 方法 。

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

在.NET实现中,它看起来像queuevariables不仅包括名称,还包括消费者和消息计数。 我不清楚node.js中有什么可用的,你可能需要深入研究。