gpt4 book ai didi

javascript - rabbitmq中当前队列大小

转载 作者:行者123 更新时间:2023-12-03 09:03:02 26 4
gpt4 key购买 nike

我正在使用 amqp.node,我想建立一个系统,无论队列中有多少条消息,每秒都会从队列中检索 1 条消息。不过,我想在从 channel 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 实例发送到每次都起作用。我如何获取当前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 - 不同的语言,但概念应该翻译为 Node

关于javascript - rabbitmq中当前队列大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32255574/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com