使用amqp方法列出所有当前已声明的队列? [关闭]

I'm using streadway/amqp to do a tie in from rabbitmq to our alert system. I need a method that can return a list of all the currently declared queues (exchanges would be nice too!) so that I can go through and get all the message counts.

I'm digging through the api documentation here...

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

...but I don't seem to be finding what I'm looking for. We're currently using a bash call to 'rabbitmqctl list_queues' but that's a kludge way to get this information, requires a custom sudo setting, and fires off hundreds of log entries a day to the secure log.

edit: method meaning, 'a way to get this piece of information' as opposed to an actual call, though a call would be great I don't believe it exists.

Answered my own question. There isn't a way! The amqp spec doesn't have a standard way of finding this out which seems like a glaring oversight to me. However, since my backend is rabbitmq with the management plugin, I can make a call to that to get this information.

from https://stackoverflow.com/a/21286370/5076297 (in python, I'll just have to translate this and probably also figure out the call to get 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

edit: In golang (this was a headache to figure out as I haven't done anything with structures in years)

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)
}

Output looks like this (I have two queues named hello and test)

[{hello /} {test /}]