【问题标题】:Go amqp method to list all currently declared queues?去 amqp 方法列出所有当前声明的队列?
【发布时间】:2015-08-11 00:19:54
【问题描述】:

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

我在这里挖掘 api 文档...

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

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

编辑:方法的意思是“一种获取这条信息的方法”,而不是实际的调用,虽然调用会很棒,但我不相信它存在。

【问题讨论】:

  • 这是一个对图书馆的功能请求,应该像这样发布在他们的问题列表中:github.com/streadway/amqp/issues
  • 这实际上是 amqp 规范的一个限制。没有办法在乐队中做这样的管理功能,你必须做一些后端特定的事情(在我的例子中调用rabbitmq管理插件api)
  • 这是一个有效的问题——不是功能请求。也提供了一个很好的答案。

标签: go rabbitmq amqp


【解决方案1】:

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

来自https://stackoverflow.com/a/21286370/5076297(在 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 /}]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多