首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >兔子in中的当前队列大小

兔子in中的当前队列大小
EN

Stack Overflow用户
提问于 2015-08-27 17:13:04
回答 1查看 1.4K关注 0票数 0

我正在使用amqp.node,并且我希望设置一个系统,它将每秒钟从队列中检索1条消息,而不管队列中有多少条消息。不过,我想在从通道get之前检查队列大小。我该怎么做?

consumer.js

代码语言:javascript
运行
复制
#!/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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-27 20:47:17

每次您想要获得当前大小时,都必须再打一个电话到assertQueue。反转您的代码,这样您就可以调用每个间隔超时,而不是只调用一次。

代码语言:javascript
运行
复制
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。然后,您的代码一次只能提取一条消息。

此外,这可能会有所帮助:http://dougbarth.github.io/2011/06/10/keeping-the-rabbit-on-a-leash.html -不同的语言,但概念应该转换为节点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32255574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档