rabbitmq 中的当前队列大小
current queue size in rabbitmq
我正在使用 amqp.node,我想设置一个系统,无论队列中有多少消息,每秒都会从队列中检索 1 条消息。我想在我 get
从频道之前检查队列大小。我该怎么做?
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)
})
}
}
我每次都为 queue.messageCount
得到相同的数字 我假设 因为我每次都向函数发送相同的 queue
实例.我如何获得 current queue.messageCount
?
每次要获取当前尺寸时,都必须再次调用 assertQueue
。反转你的代码,这样你就可以在每次间隔超时时调用它,而不是只调用一次。
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)
另外 - 这对我来说似乎是个坏主意。我建议采用不同的方法。将消费者的 the prefetch limit 设置为 1。那么您的代码一次只会提取一条消息。
此外,这可能会有所帮助:http://dougbarth.github.io/2011/06/10/keeping-the-rabbit-on-a-leash.html - 不同的语言,但概念应翻译成节点
我正在使用 amqp.node,我想设置一个系统,无论队列中有多少消息,每秒都会从队列中检索 1 条消息。我想在我 get
从频道之前检查队列大小。我该怎么做?
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)
})
}
}
我每次都为 queue.messageCount
得到相同的数字 我假设 因为我每次都向函数发送相同的 queue
实例.我如何获得 current queue.messageCount
?
每次要获取当前尺寸时,都必须再次调用 assertQueue
。反转你的代码,这样你就可以在每次间隔超时时调用它,而不是只调用一次。
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)
另外 - 这对我来说似乎是个坏主意。我建议采用不同的方法。将消费者的 the prefetch limit 设置为 1。那么您的代码一次只会提取一条消息。
此外,这可能会有所帮助:http://dougbarth.github.io/2011/06/10/keeping-the-rabbit-on-a-leash.html - 不同的语言,但概念应翻译成节点