使用Restemplate 请求 kafka监控的消费数。
背景:我要监控某个topic的个数,进而往里发送消息。但是他的请求一开始给我的是
curl 'http://127.0.0.1:49035/api/v1/query_range?query=sum(kafka_consumergroup_lag%7Binstance%3D%2210.19.2.238%3A9308%22%2Ctopic%3D~%22middle-h265-video-schedule%22%7D)%20by%20(consumergroup%2C%20topic)%20&start=1729580548&end=1729580608&step=60'
这个本身使用curl请求没问题但是用了 Restemplate就报错。
错误示例:
long currentTime=System.currentTimeMillis()/1000;
String requestParam = UriComponentsBuilder.fromHttpUrl("http://127.0.0.1:49035/api/v1/query_range?query=sum(kafka_consumergroup_lag%7Binstance%3D%2210.19.2.238%3A9308%22%2Ctopic%3D~%22short-h265-video-schedule%22%7D)%20by%20(consumergroup%2C%20topic)%20")
.queryParam("start", currentTime - 60)
.queryParam("end", currentTime)
.queryParam("step", 60).build().toUriString();
ResponseEntity<String> responseEntity = restTemplate.getForEntity(requestParam, String.class);
String body = responseEntity.getBody();
log.info("video transcode|getShortVideoTransCount|{}",body);
Optional<Integer> count = Optional.ofNullable(body)
.map(j -> JSONObject.parseObject(j))
.map(j -> j.getJSONObject("data"))
.map(j -> j.getJSONArray("result"))
.map(j -> j.stream().findFirst().get().toString())
.map(j -> JSONObject.parseObject(j))
.map(j -> j.getJSONArray("values"))
.map(j -> j.getJSONArray(0))
.map(j -> j.getInteger(1));
if(count.isPresent())return count.get();
原因是 query参数是编码过的。
正确示例:
long currentTime=System.currentTimeMillis()/1000;
URI uri = UriComponentsBuilder.fromHttpUrl("http://127.0.0.1:49035/api/v1/query_range")
.queryParam("query", "sum(kafka_consumergroup_lag{instance=\"10.19.2.238:9308\",topic=~\"short-h265-video-schedule\"}) by (consumergroup, topic)")
.queryParam("start", currentTime - 60)
.queryParam("end", currentTime)
.queryParam("step", 60)
.build().toUri();
// log.info("request getShortVideoTransCount:{}",uri);
ResponseEntity<String> responseEntity = httpTemplate.getForEntity(uri, String.class);
String body = responseEntity.getBody();
log.info("video transcode|getShortVideoTransCount|{}",body);
Optional<Integer> count = Optional.ofNullable(body)
.map(j -> JSONObject.parseObject(j))
.map(j -> j.getJSONObject("data"))
.map(j -> j.getJSONArray("result"))
.map(j -> j.stream().findFirst().get().toString())
.map(j -> JSONObject.parseObject(j))
.map(j -> j.getJSONArray("values"))
.map(j -> j.getJSONArray(0))
.map(j -> j.getInteger(1));
if(count.isPresent())return count.get();

343

被折叠的 条评论
为什么被折叠?



