python - Rabbitmq - 队列状态显示为 'running',GUI 显示状态为 IDLE

标签 python rabbitmq

我在玩 rabbitmq HTTP API 时遇到了一个奇怪的场景。当我通过 Web 界面查看我的队列时,它们的状态都显示为空闲。 queue status IDLE .

但是,当我使用 HTTP API 时,两个队列的返回都显示为“正在运行”。我使用的代码如下:

import requests
import json

uri = 'http://localhost:15672/api/queues'

r = requests.get(uri, auth=("guest","guest"))

parsed = json.loads(r.content)
#print json.dumps(parsed, indent=4)
for i in parsed:
    print '{:<20} : {}'.format(i.get('name'), i.get('state'))

输出:

test queue           : running
test2                : running

有人可以向我解释这种行为吗?

最佳答案

在此处检查 Management_console 源代码:https://github.com/rabbitmq/rabbitmq-management/blob/master/priv/www/js/formatters.js#L479

function fmt_object_state(obj) {
    if (obj.state == undefined) return '';

    var colour = 'green';
    var text = obj.state;
    var explanation;

    if (obj.idle_since !== undefined) {
        colour = 'grey';
        explanation = 'Idle since ' + obj.idle_since;
        text = 'idle';
    } 

如果字段 idle_since 不为空,控制台将显示“idle”。

如果您的队列中有“流量”,您将有一个这样的 json:

      "policy":"",
      "exclusive_consumer_tag":"",
      "consumers":0,
      "consumer_utilisation":"",
      "memory":176456,
      "recoverable_slaves":"",
      "state":"running", 

如果队列处于空闲状态(没有流量),您将得到这样的 json:

      "idle_since":"2015-06-25 10:15:07",
      "consumer_utilisation":"",
      "policy":"",
      "exclusive_consumer_tag":"",
      "consumers":0,
      "recoverable_slaves":"",
      "state":"running",

如您所见,字段 "idle_since" 不为空。

在这两种情况下,队列始终处于running 状态。

总而言之,它只是一种 WebView 格式。

关于python - Rabbitmq - 队列状态显示为 'running',GUI 显示状态为 IDLE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31038064/

相关文章:

python - 将 ascii 文件读入 numpy 数组

Python:没有依赖项的卡住选项?

python - 如何将字符串 ['2019-06-01T23:07:02.000+0000' ] 转换为 Python 3 中的日期时间对象

python - 使用逻辑运算符索引 numpy 数组

Redis 发布/订阅 vs Rabbit MQ

python - 在 html 元素上使用 text_content() 时避免连续出现单词的可靠方法

java - 任务完成时如何获取 RabbitMQ 消息?

RabbitMQ 直接交换 : default vs.

java - 在Spring中不断创建/绑定(bind)和解除绑定(bind)/删除rabbitmq队列

javascript - 在 Node.js 中使用 RabbitMQ 的 header 交换示例