我正在使用streadway / amqp从rabbitmq到我们的警报系统。我需要一个方法可以返回所有当前声明的队列的列表(交换也很好!)这样我就可以通过并获取所有的消息计数。
我正在挖掘api文档......
http://godoc.org/github.com/streadway/amqp#Queue
......但我似乎没有找到我正在寻找的东西。我们正在使用对'rabbitmqctl list_queues'的bash调用,但这是获取此信息的一种方法,需要自定义sudo设置,并且每天会向安全日志发出数百个日志条目。
编辑:方法意思是'获取这条信息的一种方式'而不是实际的通话,虽然通话很棒我不相信它存在。
答案 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 /}]