Golang 中调用 RabbitMQ 的node API
时间: 2024-04-25 16:21:49 浏览: 15
在 Golang 中调用 RabbitMQ 的节点(Node)API,你可以使用标准的 `net/http` 包来发送 HTTP 请求并处理响应。以下是一个简单的示例代码,用于获取 RabbitMQ 节点的信息:
```go
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
type NodeInfo struct {
Name string `json:"name"`
Type string `json:"type"`
Running bool `json:"running"`
MemoryUsed int `json:"mem_used"`
DiskFree int `json:"disk_free"`
}
func main() {
// RabbitMQ Node API URL
url := "http://localhost:15672/api/nodes"
// 创建 HTTP 客户端
client := &http.Client{}
// 创建 HTTP 请求
req, err := http.NewRequest("GET", url, nil)
if err != nil {
fmt.Println("创建请求失败:", err)
return
}
// 设置 Basic Auth 认证(如果需要)
req.SetBasicAuth("username", "password")
// 发送请求并获取响应
resp, err := client.Do(req)
if err != nil {
fmt.Println("发送请求失败:", err)
return
}
defer resp.Body.Close()
// 读取响应内容
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("读取响应失败:", err)
return
}
// 解析 JSON 响应
var nodes []NodeInfo
err = json.Unmarshal(body, &nodes)
if err != nil {
fmt.Println("解析响应失败:", err)
return
}
// 输出节点信息
for _, node := range nodes {
fmt.Printf("节点名称: %s\n", node.Name)
fmt.Printf("节点类型: %s\n", node.Type)
fmt.Printf("运行状态: %v\n", node.Running)
fmt.Printf("内存使用: %d\n", node.MemoryUsed)
fmt.Printf("磁盘可用: %d\n", node.DiskFree)
fmt.Println("----------------------")
}
}
```
请注意,上述代码中的 `url` 变量需要根据你的 RabbitMQ 配置进行相应调整。如果 RabbitMQ 设置了用户名和密码的认证,你需要使用 `SetBasicAuth` 方法设置 Basic Auth 认证信息。
该示例代码发送一个 HTTP GET 请求到 RabbitMQ 的 `/api/nodes` 接口,获取所有节点的信息,并将其解析为 `NodeInfo` 结构体。然后,你可以根据需要处理和使用这些节点信息。
希望这个示例能帮助到你。如果有任何其他问题,请随时提问。