列出所有当前声明的队列的 Go amqp 方法是什么?

3
我正在使用streadway/amqp将RabbitMQ与我们的警报系统进行关联。我需要一个方法,可以返回所有当前声明的队列列表(交换机也不错!),以便我可以遍历它们并获取所有消息计数。
我正在查阅这里的API文档...
http://godoc.org/github.com/streadway/amqp#Queue

...但我似乎找不到我在寻找的内容。我们目前是使用bash调用'rabbitmqctl list_queues',但这是一种获取此信息的笨拙方式,需要自定义sudo设置,并每天向安全日志发送数百个日志条目。

编辑:方法意味着“获取此信息的方法”,而不是实际的调用方法,虽然调用方法很好,但我认为它不存在。


这是一个库的功能请求,请将其作为问题发布在他们的问题列表上:https://github.com/streadway/amqp/issues - Derick Bailey
事实上,这是AMQP规范的一种限制。没有办法在带内执行此类管理功能,您必须执行特定于后端的操作(在我的情况下,调用RabbitMQ管理插件API)。 - user5076297
这是一个有效的问题,而不是一个功能请求。同时也提供了一个好的答案。 - Brent Bradburn
1个回答

11
我自己回答了这个问题。没有办法!AMQP规范没有一种标准的方法来找出这个信息,这对我来说似乎是一个明显的疏漏。然而,由于我的后端是带有管理插件的RabbitMQ,我可以调用它来获取这些信息。
来自https://dev59.com/k2855IYBdhLWcg3wiU31#21286370(在Python中,我只需要翻译这个并且可能还要弄清楚如何调用获取虚拟主机)。
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 /}]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接