OpenTSDB使用/ API / PUT进行数据存储的java实现

写在前面,这里是补充下java代码的一些实现,感谢同事w给我提供的帮助。参考文献和其他文章列表放在末尾。


这篇文章讲的OpenTSDB如何存储数据的java实现,实现步骤很简单,也有其他一些方法,不过post应该是最普遍的:

第一创建一个对post请求进行分析的响应类,可以对返回响应码进行分析。进一步可以获取响应内容和实现重试发送的功能。

第二是将实体数据转化为opentsdb标准json数据格式并存入,并用post请求发送。


第一创建一个对post请求进行分析的响应类,可以对返回响应码进行分析。进一步可以获取响应内容和实现重试发送的功能。

 /**
     * post请求
     *
     * @param url  请求url
     * @param data json类型字符串数据
     * @return 响应内容
     */
    public static boolean postReturnBoolean(String url, String data) throws Exception {
        //成功响应码开头
        final String successCodeHead = "2";

        //创建客户端
        CloseableHttpClient client = getClient();
        HttpPost post = new HttpPost(url);

        // 构造请求数据
        StringEntity entity = new StringEntity(data, ContentType.APPLICATION_JSON);
        post.setEntity(entity);

        //HTTP响应、响应状态码
        CloseableHttpResponse response = null;
        Integer statusCode = null;
        String responseContent = null;
        try {
            //执行post请求
            response = client.execute(post);
            //获取响应状态码
            statusCode = response.getStatusLine().getStatusCode();

            LOGGER.info("response code:" + statusCode);

            if (!successCodeHead.equals(statusCode.toString().substring(0, 1))) {
                HttpEntity httpEntity = response.getEntity();
                responseContent = EntityUtils.toString(httpEntity, "UTF-8");
                JSONObject error = JSON.parseObject(responseContent);
                String errorMessage = error.getJSONObject("error").getString("message");
                LOGGER.error(errorMessage);
                throw new Exception(errorMessage);
            } else {
                return true;
            }
        } catch (ClientProtocolException e) {
            LOGGER.error("Http Client ClientProtocolException",e);
        } catch (IOException e) {
            LOGGER.error("Http Client IOException",e);
        } finally {
            try {
                response.close();
            } catch (Exception e) {
                LOGGER.error("响应关闭失败",e);
            }
        }
        return false;
    }

第二是将实体数据转化为opentsdb标准json数据格式并存入,并用post请求发送。

public boolean put2tsdb(List<DataPutEntity> data) throws Exception {
List<OpenTsdbDataEntity> putData = new ArrayList<>();
//转为opentsdb标准数据格式
for (DataPutEntity onePieceData : data) {

    //获取属性,准备做Mertic
    String Foo1 = onePieceData.getFoo1();
    //获取两个其他属性,做tags
    String Foo2= onePieceData.getFoo2();
    String Foo3= onePieceData.getFoo3();
    //时间戳
    Long timestamp = onePieceData.getTimestamp();
    //值
    Float value = onePieceData.getValue();
    //质量标签
    Integer quality = onePieceData.getQuality();

    //值数据
    OpenTsdbDataEntity valueData = new OpenTsdbDataEntity();

    valueData.setMetric(stdCode);

    HashMap<String, String> tags = new HashMap<>();
    tags.put(Foo2_TAG_KEY, Foo2);
    tags.put(Foo3_TAG_KEY, Foo3);
    valueData.setTags(tags);
    
    valueData.setTimestamp(timestamp);
    
    valueData.setValue(value);
    
    putData.add(valueData);
}
String dataJson = JSON.toJSONString(putData);
//显示拼装数据的json,便于监控
LOGGER.info("输入openTSDB的数据是"+dataJson);

//通过Http API发送数据  URL_PUT=IP:端口/api/put
boolean isSuccessful = HttpClientPost.postReturnBoolean(URL_PUT, dataJson);
//返回是否发送成功标志
return isSuccessful;
}

OpenTSDB系列

OpenTSDB的/ API / PUT(opentsdb的输入的api)简介https://blog.csdn.net/jyj1100/article/details/81323705

OpenTSDB使用/ API / PUT进行数据存储的java实现https://blog.csdn.net/jyj1100/article/details/81330623

(转)opentsdb查询的简介——基础知识和UI操作https://blog.csdn.net/jyj1100/article/details/81324017

OpenTSDB的/ API / query(opentsdb的查询的api)简介(一)https://blog.csdn.net/jyj1100/article/details/81326660

OpenTSDB的/ API / query(opentsdb的查询的api)简介(二)https://blog.csdn.net/jyj1100/article/details/81329290

OpenTSDB使用/ API / query进行数据查询的java实现https://blog.csdn.net/jyj1100/article/details/81347817

其他OpenTSDB系列文章见

OpenTSDB系列目录https://blog.csdn.net/jyj1100/article/details/83450282

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值