go amqp方法列出所有当前声明的队列?

时间:2015-08-11 00:19:54

标签: go rabbitmq amqp

我正在使用streadway / amqp从rabbitmq到我们的警报系统。我需要一个方法可以返回所有当前声明的队列的列表(交换也很好!)这样我就可以通过并获取所有的消息计数。

我正在挖掘api文档......

http://godoc.org/github.com/streadway/amqp#Queue

......但我似乎没有找到我正在寻找的东西。我们正在使用对'rabbitmqctl list_queues'的bash调用,但这是获取此信息的一种方法,需要自定义sudo设置,并且每天会向安全日志发出数百个日志条目。

编辑:方法意思是'获取这条信息的一种方式'而不是实际的通话,虽然通话很棒我不相信它存在。

1 个答案:

答案 0 :(得分:4)

回答了我自己的问题。没办法! amqp规范没有标准的方法来解决这个问题,这对我来说似乎是一个明显的疏忽。但是,由于我的后端是带管理插件的rabbitmq,我可以打电话给它来获取这些信息。

来自https://stackoverflow.com/a/21286370/5076297(在python中,我只需要翻译它,并且可能还要弄清楚调用vhosts):

import requests

def rest_queue_list(user='guest', password='guest', host='localhost', port=15672, virtual_host=None):
    url = 'http://%s:%s/api/queues/%s' % (host, port, virtual_host or '')
    response = requests.get(url, auth=(user, password))
    queues = [q['name'] for q in response.json()]
    return queues

编辑:在golang中(由于我多年来没有对结构做过任何事情,这很难解决)

package main

import (
    "fmt"
    "net/http"
    "encoding/json"
)

func main() {

    type Queue struct {
        Name string `json:name`
        VHost string `json:vhost`
    }

    manager := "http://127.0.0.1:15672/api/queues/"
    client := &http.Client{}
    req, _ := http.NewRequest("GET", manager, nil)
    req.SetBasicAuth("guest", "guest")
    resp, _ := client.Do(req)

    value := make([]Queue, 0)
    json.NewDecoder(resp.Body).Decode(&value)
    fmt.Println(value)
}

输出看起来像这样(我有两个名为hello和test的队列)

[{hello /} {test /}]