RabbitMQ:我如何看到队列中形成的积压?

RabbitMQ:我如何看到队列中形成的积压?,rabbitmq,Rabbitmq,我正在开发一个使用多个RabbitMQ队列的系统。我想知道诸如“是否有任何队列已满(处理速度不够快)”和“队列相对而言有多满?”之类的信息,一些实时条形图就足够了 如何查看此信息?我正在查看JSON API,但不清楚哪些数字是相关的;例如,对于给定的队列,消息计数始终显示为0,即使消息正在通过。我们根据队列长度创建了一个splunk警报,我猜您正在尝试执行类似的操作 如果您使用的是队列JSON API(http://{host}:15672/API/queues/{vhost}/),那么可以使用

我正在开发一个使用多个RabbitMQ队列的系统。我想知道诸如“是否有任何队列已满(处理速度不够快)”和“队列相对而言有多满?”之类的信息,一些实时条形图就足够了


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

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

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

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

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

@jhilden的回答让我开始;“蓝”是我想看到的。下面是一个简单的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

@吉尔登的回答让我走了;“蓝”是我想看到的。下面是一个简单的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

我想在生产者和消费者身上多加一点代码就可以做到这一点。我想在生产者和消费者身上多加一点代码就可以做到这一点。