RabbitMQ:如何在队列中看到积压?

时间:2015-02-26 19:58:28

标签: rabbitmq

我正在使用一个使用多个RabbitMQ队列的系统。我想知道像#34;任何队列都满了(没有足够快地处理)?"和#34;队列相对于彼此有多满?"一些实时条形图就足够了。

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

2 个答案:

答案 0 :(得分:2)

我们根据队列长度创建了一个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,

这些值应该全部填充并实时更改。

答案 1 :(得分: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