【问题标题】:RabbitMQ: How can I see backlogs forming in queues?RabbitMQ:如何查看队列中的积压工作?
【发布时间】:2015-04-29 08:54:35
【问题描述】:

我正在开发一个使用多个 RabbitMQ 队列的系统。我想知道诸如“队列是否已满(处理不够快)之类的事情?”和“相对于彼此的队列有多满?”一些实时条形图就足够了。

如何查看此信息?我正在查看 JSON API,但我不清楚哪些数字是相关的;例如,对于给定的队列,messages 计数一直显示为 0,即使消息正在通过。

【问题讨论】:

  • 我想在生产者和消费者上添加一些额外的代码就可以实现这一点。

标签: rabbitmq


【解决方案1】:

我们根据队列长度创建了一个 splunk 警报,我猜您正在尝试做类似的事情。

如果您使用的是队列 JSON API (http://{host}:15672/api/queues/{vhost}/),那么您可以使用的一些值是:

"messages": 25,
"messages_details": {
    "rate": 0
},
"messages_ready": 25,
"messages_ready_details": {
    "rate": 0
},
"messages_unacknowledged": 0,
"messages_unacknowledged_details": {
    "rate": 0
}

另一个是:

"len": 25,

这些值都应实时填充和更改。

【讨论】:

    【解决方案2】:

    @jhilden 的回答让我走了; “len”是我想看到的。这是一个简单的 Ruby 脚本,用于轮询和输出队列长度:

    require "json"
    require "time"
    
    user     = "guest"
    password = "guest"
    host     = "localhost"
    port     = "15672"
    vhost    = "%2f" # url encoded "/", the default vhost
    interval = 2
    
    loop do
      # We could do this using native Ruby code instead
      command = "curl -u #{user}:#{password} http://#{host}:#{port}/api/queues/#{vhost} 2> /dev/null"
      json    = %x{#{command}}
      data    = JSON.parse(json)
      info  = data.map { |q| 
        "#{q.fetch("name")} - #{q.fetch("backing_queue_status").fetch("len")}"
      }.join("\n")
    
      puts DateTime.now
      puts info
      puts "=" * 40
      sleep interval
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      • 2015-03-31
      • 1970-01-01
      • 2017-02-27
      • 1970-01-01
      相关资源
      最近更新 更多