MQTT中查询rocketmq的admin api,ExamineConsumeStats
rocketmq返回的内容:
{"consumeTps":0.0,"offsetTable":{{"brokerName":"broker-a","queueId":7,"topic":"evidence-sync-cloud"}:{"brokerOffset":0,"consumerOffset":0,"lastTimestamp":0}}}
可以看到在offsetTable里面的数据并不是标准的json。
查看了rocketmq的源码,发现定义的是一个以MessageQueue为key的HashMap:
private HashMap<MessageQueue, OffsetWrapper> offsetTable = new HashMap();
这样的非标准的json返回数据给golang解析带来了很大困扰,请问下怎么处理这样的数据,ExamineConsumeStats这个API返回的数据的问题,求救大家如何解决的
可以考虑使用golang中的json.RawMessage类型来暂时保存这个非标准的JSON数据,在需要使用时再进行具体的解析操作。
步骤如下:
定义结构体来表示ExamineConsumeStats的返回数据: type ConsumeStats struct { ConsumeTps float64 OffsetTable map[string]json.RawMessage } 在解析ExamineConsumeStats的返回数据时,使用json.RawMessage类型来保存offsetTable字段的值: consumeStats := ConsumeStats{} err := json.Unmarshal(response, &consumeStats) 在需要使用offsetTable字段时,进行具体的解析操作: for key, value := range consumeStats.OffsetTable { offsetWrapper := OffsetWrapper{} err := json.Unmarshal([]byte(value), &offsetWrapper) // Do something with the offsetWrapper object } 使用这种方法,可以方便地暂时保存非标准的JSON数据,并在需要使用时进行具体的解析操作。
阿里云MQ的RocketMQ的Admin API返回的数据确实不是标准的JSON格式,而是一种类似于Map的数据结构。如果您使用Golang进行解析,可以使用Golang的map类型来处理该数据。
具体步骤如下:
使用Golang的HTTP库发送ExamineConsumeStats请求,并获取返回的结果。
将返回的结果转换成map类型。可以使用Golang的json库中的Unmarshal函数,将返回结果转换成byte数组,再使用Golang的map类型进行解析。示例代码如下:
import (
"encoding/json"
"fmt"
)
func main() {
// 假设返回的结果为resultStr
resultStr := `{"consumeTps":0.0,"offsetTable":{{"brokerName":"broker-a","queueId":7,"topic":"evidence-sync-cloud"}:{"brokerOffset":0,"consumerOffset":0,"lastTimestamp":0}}}`
// 将结果转换成byte数组
resultBytes := []byte(resultStr)
// 定义一个空的map类型
resultMap := make(map[string]interface{})
// 解析byte数组
err := json.Unmarshal(resultBytes, &resultMap)
if err != nil {
fmt.Println("解析结果失败:", err)
return
}
// 打印解析结果
fmt.Println("解析结果:", resultMap)
}
由于该数据结构比较复杂,因此在解析时需要进行多层嵌套,具体解析方式需要根据实际情况进行调整。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/