Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用节点amqp获取队列中的消息数_Node.js_Rabbitmq_Amqp - Fatal编程技术网

Node.js 如何使用节点amqp获取队列中的消息数

Node.js 如何使用节点amqp获取队列中的消息数,node.js,rabbitmq,amqp,Node.js,Rabbitmq,Amqp,我在节点应用程序中将节点amqp用作排队系统。我希望能够监控队列的状态,以确定是否有足够的工人在运行,即,如果队列大小在增加,我们就知道我们开始落后了 我知道,在命令行中,您可以使用以下命令: rabbitmqctl list_queues 这为我提供了所需的确切信息,但我想知道是否有任何方法可以从节点amqp本身执行此操作 提前谢谢 编辑 最后,我只是使用命令行工具rabbitmqctl来获取我所需要的信息,这不是一个很好的解决方案,但下面是我所做的 var Logger = require

我在节点应用程序中将节点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);

    });

}
var记录器=需要('as-Logger');
getQueueMeta(函数(信息){
Logger.info(info);
});
/**
*返回以队列名称作为索引的稀疏数组
*以及作为值的消息数,例如。;
*
*info=[我的队列:9,我的另一个队列:1]
* 
*@param回调
*/
函数getQueueMeta(回调){
var sys=require('sys')
var exec=require('child_process')。exec;
exec(“/usr/local/sbin/rabbitmqctl list_queues”),函数(error,stdout,stderr){
var信息=[];
如果(!错误){
变量行=stdout.split(/\n/);
如果(lines.length>1){

对于(var i=1;i,RabbitMQ支持最高为0.9.1的AMQP。您可以直接查看文档

快速浏览文档会发现,AMQP只包括连接、交换和基本排队/退队等内容。然而,
rabbitmqctl
中的许多功能根本无法通过AMQP规范访问。这样,
rabbitmqctl
就更接近于“管理”工具,其中AMQP连接基本上是一个“消费者”工具

尽管如此,您可能很幸运。请查看
connection.queue()


在.NET实现中,
queue
变量似乎不仅包括名称,还包括消费者和消息的数量。我不清楚node.js中有哪些可用内容,您可能需要深入了解。

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

谢谢,查看节点amqp的源代码并检查队列对象,遗憾的是没有消息或消费者计数(我可以看到)是的,我查看了节点AMQP中的代码,但它没有填充。也就是说,如果.NET和Java库能够提取它,则很可能数据存在并且没有被公开。不确定为什么,但我使用的是版本0.5.2,它没有公开这些属性。@HoangTrinh抱歉,NPM上的节点AMQP库用于指向是存储库,我的注释引用了它:这是可行的,但我需要在队列选项中设置“passive:true”。
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);
  });
});