Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.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
Javascript rabbitmq中的当前队列大小_Javascript_Node.js_Rabbitmq - Fatal编程技术网

Javascript rabbitmq中的当前队列大小

Javascript rabbitmq中的当前队列大小,javascript,node.js,rabbitmq,Javascript,Node.js,Rabbitmq,我使用的是amqp.node,我想建立一个系统,无论队列中有多少消息,该系统每秒都会从队列中检索1条消息。不过,我想在从频道获取之前检查队列大小。我该怎么做 consumer.js #!/usr/bin/env node var amqp = require('amqplib/callback_api') amqp.connect('<my_rabbitmq_host_info>', function(err, conn){ conn.createChannel(functio

我使用的是amqp.node,我想建立一个系统,无论队列中有多少消息,该系统每秒都会从队列中检索1条消息。不过,我想在从频道获取之前检查队列大小。我该怎么做

consumer.js

#!/usr/bin/env node

var amqp = require('amqplib/callback_api')
amqp.connect('<my_rabbitmq_host_info>', function(err, conn){
  conn.createChannel(function(err, ch){
    var q = 'message-queue'
    ch.assertQueue(q, {durable: false}, function(err, queue){
      console.log(' [*] waiting for messages in queue: %s -- to exit press ctrl+c', q)

      setInterval(function(){
       getMessage(ch, q, queue)
      }, 1000)
    })
  })
})

function getMessage(ch, q, queue){
  if( !queue ){
    return
  }

  console.log('queue %s has %d messages in it...', q, queue.messageCount)
  if( queue.messageCount > 0 ){
    console.log('getting 1 message from queue')
    ch.get(q, {noAck: false}, function(err, msg){
      console.log(' [x] message recieved: %s \n\n', msg.content.toString())
      ch.ack(msg)
    })
  }
}
#/usr/bin/env节点
var amqp=require('amqplib/callback_api')
amqp.connect(“”,功能(错误,连接){
conn.createChannel(函数(错误,通道){
var q='消息队列'
assertQueue(q,{dustable:false},函数(err,queue){
log('[*]正在队列中等待消息:%s--要退出,请按ctrl+c',q)
setInterval(函数(){
getMessage(ch、q、队列)
}, 1000)
})
})
})
函数getMessage(ch、q、队列){
如果(!队列){
返回
}
console.log('队列%s中有%d条消息…',q,queue.messageCount)
如果(queue.messageCount>0){
console.log('从队列中获取1条消息')
ch.get(q,{noAck:false},函数(err,msg){
console.log('[x]收到的消息:%s\n\n',msg.content.toString()
总确认(味精)
})
}
}

每次我假设
queue.messageCount
都会得到相同的编号,因为每次我都向函数发送相同的
queue
实例。如何获取当前
队列。messageCount

每次要获取当前大小时,都必须再次调用
资产队列。反转您的代码,以便在每个间隔超时时调用它,而不是只调用一次


setInterval(function(){

  ch.assertQueue(q, {durable: false}, function(err, queue){
    console.log(' [*] waiting for messages in queue: %s -- to exit press ctrl+c', q)
    getMessage(ch, q, queue)
  });

}, 1000)

而且,这对我来说似乎是个坏主意。我建议采用不同的方法。为消费者设置为1。那么你的代码一次只能提取一条消息


此外,这可能会有所帮助:-不同的语言,但概念应该翻译为node

谢谢derick。我能够实现一个令牌桶并在一个示例应用程序中使用预取。。工作得很好!