自定义Annotation的实用场景和实操代码(hbase交互)

Pinpoint全链路监控:无侵入式APM原理、集群部署与性能排查实战 在分布式系统和微服务架构中,应用性能管理(APM)是保障系统稳定性的关键技术。其核心原理是通过追踪技术,将一次请求在多个服务间的调用关系串联成完整的调用链,从而实现对系统内部行为的可视化。这项技术的核心价值在于,它能将模糊的性能问题定位到具体的代码方法、数据库查询或网络调用,极大提升了故障排查和性能优化的效率。典型的应用场景包括定位接口延迟根因、分析服务间依赖、以及监控生产环境实时性能。本文以开源APM工具Pinpoint为例,深入解析其基于字节码增强的无侵入式数据采集机制,并详细演示如何搭建高可用的Pin 阅读详情

场景

注解的实用,当然是为了让我们的代码更具有扩展性, 更加的高大上, 例如将 数据库表与对象添加注解,进行对应.

例如:
我们可以直接将一条半结构化数据经过处理放到hbase数据库中,但是这样的话,如果列非常多的情况,我们的代码也要很长,但是实用注解配合反射的用法,可以提高扩展性,在数据量大,列多的情况,可以简化我们的代码

代码:
自定义注解:

/**
* 规则: 列名为""时, 属性名就是列名
*/
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {

    String family()  default "info";
    String column()  default "";
}

 /**
     *   以字符串的形式像hbase中插入数据
     * @param data
     * @throws Exception
     */
     public void insertDatas(String data) throws  Exception{

        //1. 获取到要添加的数据
        String[] split = data.split("\t");
        String  call1=split[0];
        String  call2=split[1];
        String  callTime=split[2];
        String  duration=split[3];

        //2.  TODO 设计rowkey 重要

     
        // rowkey = partitionNum+ call1 +call2+time+duration

        String rowkey=getPartitionNum(call1,callTime)+"_"+call1+"_"+call2+"_"+callTime+"_"+duration;
        Put put = new Put( rowkey.getBytes());

        put.addColumn(Names.CF_CALLER.value().getBytes(), Bytes.toBytes("call1"),Bytes.toBytes(call1));
        put.addColumn(Names.CF_CALLER.value().getBytes(), Bytes.toBytes("call2"),Bytes.toBytes(call2));
        put.addColumn(Names.CF_CALLER.value().getBytes(), Bytes.toBytes("callTime"),Bytes.toBytes(callTime));
        put.addColumn(Names.CF_CALLER.value().getBytes(), Bytes.toBytes("duration"),Bytes.toBytes(duration));

        //插入数据
        putData(put);

    }

注解+反射的方式: 这样的话,只需要添加相应的注解,再用反射进行获取值就ok了!
(虽然看起来可能比较麻烦)

 protected   void putData(Object obj) throws  Exception{

        // TODO 1.根据注解获取到对应表的名称

        Class clazz = obj.getClass();
        com.dxy.common.api.TableName  annotation = (com.dxy.common.api.TableName)clazz.getAnnotation(com.dxy.common.api.TableName.class);

        String tableName = annotation.value();

        Connection connection = getConnection();
        Table connectionTable = connection.getTable(TableName.valueOf(tableName));

        // TODO 2. 获取rowkey值
        String rowkey="";
        Field[] fields = clazz.getDeclaredFields();//获取对象全部的属性

        for (Field field : fields) {

            Rowkey rowkeyAnno =  field.getAnnotation(Rowkey.class);
            if(rowkeyAnno != null){
                field.setAccessible(true);
                rowkey = (String)field.get(obj);// 获取到属性的值
            }
        }

         // TODO 3. 获取列和列族
        Put put=new Put(rowkey.getBytes());

        for (Field field : fields) {
            Column columnAn = field.getAnnotation(Column.class);

            if(columnAn!= null){
                String family = columnAn.family();
                String column = columnAn.column();

                if(column == null  || column.equals("")){
                    column = field.getName();//获取到属性的名称
                }
                
                field.setAccessible(true);
                String value=(String)  field.get(obj);
                put.addColumn(Bytes.toBytes(family),Bytes.toBytes( column),Bytes.toBytes(value));
            }

        }
        
        connectionTable.put(put);
        
        connectionTable.close();
    }
Pinpoint全链路监控:从分布式追踪原理到生产环境部署实战 分布式系统架构下,服务间调用关系复杂,传统的单体应用监控方式难以满足故障排查和性能分析需求。分布式追踪技术应运而生,它通过Trace、Span等核心概念,构建请求的完整调用链路,实现跨服务性能问题的精准定位。这项技术的核心价值在于将孤立的性能数据串联成有因果关系的调用链,帮助开发者快速识别性能瓶颈、定位故障根因。在实际应用场景中,全链路监控已成为微服务可观测性体系的关键组成部分。Pinpoint作为一款经典的无侵入式APM工具,通过字节码增强技术自动采集调用链数据,并默认采用HBase存储海量追踪数据,为J 阅读详情

相关推荐

MapStruct进阶指南:从基础映射到复杂场景与架构整合

对象映射是Java后端开发中处理数据转换的核心技术,其原理是通过自动化工具替代手动编码,实现不同对象模型(如Entity、DTO、VO)之间的属性复制与转换。这项技术的核心价值在于提升开发效率、保障类型安全并减少样板代码。在实际工程实践中,对象映射广泛应用于微服务架构中的数据契约转换、前后端数据交互以及多层应用中的数据层隔离等场景。本文聚焦于MapStruct这一高性能编译时映射框架,深入探讨如何通过其高级配置(如uses、unmappedTargetPolicy)处理集合映射、嵌套对象、循环引用等复杂情况

weixin_30521161的博客 384

hbase-各版本特性

1.0 1.API的变化,比如放弃了客户端几个重要的API:( HTableInterface, HTable,HBaseAdmin),建议程序升级到新的API,老的PAI会在2.X中删除。 2.不重启regionserver的情况下读取配置文件。 3.master节点也运行regionserver。master与regionserver共享RPC端口。 4.global memstore和blo...

program哲学 4532

annotations-2.0.0.jar

annotations-2.0.0.jar

Annotation的应用场合

annotation一般作为一种辅助途径,应用在软件框架或工具中,在这些工具类中根据不同的 annontation注解信息采取不同的处理过程或改变相应程序元素(类、方法及成员变量等)的行为。   例如:Junit、Struts、Spring等流行工具框架中均广泛使用了annontion。使代码的灵活性大提高。 下面自定义一个简单的注解和工具类来演示。 Auth

Benson的专栏 1459

hbase-annotations-1.1.2-API文档-中英对照版.zip

赠送jar包:hbase-annotations-1.1.2.jar; 赠送原API文档:hbase-annotations-1.1.2-javadoc.jar; 赠送源代码:hbase-annotations-1.1.2-sources.jar; 包含翻译后的API文档:hbase-annotations-1.1.2-javadoc-API文档-中文(简体)-英语-对照版.zip 对应Maven信息:groupId:org.apache.hbase,artifactId:hbase-annotations,version:1.1.2 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

IEC61850客户端连接实战:CMS vs MMS协议抓包对比与性能初探(基于YX-PIS协议栈)

本文深入探讨了IEC61850客户端连接中CMS与MMS协议的抓包对比与性能优化。通过Wireshark抓包分析、协议栈配置实战和性能基准测试,揭示了两种协议在连接建立、数据交互和性能调优方面的关键差异,为智能电网自动化系统的协议选择提供了实用指南。

weixin_29209805的博客 215

HBase Maven 工程模块梳理

HBase Maven 工程各个 Model 功能说明: github 地址:git://git.apache.org/hbase.git 1、hbase-annotations 从 Hadoop 中 copy 来的的代码注解(所有的类、接口都要用到)。包含两个注解:InterfaceAudience 和 InterfaceStability。 2、hbase-assembly 项目构建相关。没有代码,xml 文件和一个 license 相关的声明。 3、hbase-checkstyle ch

赶路人儿 963

Habitat安装全网最详细教程,手把手带你跑通example.py(全网唯一)

全网最详细具身智能仿真平台habitat的安装教程

shannanshouyin的博客 2756

第十章 :hbase集群搭建,测试

一,在ubuntu主机上安装hbase,在上一章中我们已经在ubuntu3主机上安装了hbase,这里为了省事,直接远程复制到ubuntu主机上。xiaoye@ubuntu3:~$ lsapache-activemq-5.15.3  hbase                        Publicclasses                 hive                    ...

小爷欣欣 647

EnlightenGAN训练复现记录

记录EnlightenGAN过程中的问题和解决方式。提示:以下是本篇文章正文内容,下面案例可供参考。

L_27N113E的博客 3847

对称加密和非对称加密,数字签名和证书

在对称加密中,任何人都可以使用公钥进行加密。在数字签名中,任何人都可以使用公钥验证签名。数字签名,其实就是将非对称加密反过来使用。公钥私钥非对称加密发送者加密时使用接收者解密时使用数字签名验证者验证签名时使用签名者生成签名时使用谁持有密钥?只要有需要,任何人都可以持有个人持有既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密。公钥负责加密,私钥负责解密。既然是签名,那肯定是不希望有人冒充我发消息,所以只有我才能签名。私钥负责签名,公钥负责验签。

m0_70432049的博客 1410

5步掌握Pinpoint全链路追踪:从架构设计到生产部署实战

微服务架构的复杂性让分布式系统监控成为技术团队面临的核心挑战。当请求在数十个服务间流转时,传统监控工具难以追踪完整调用路径,性能瓶颈定位如同大海捞针。Pinpoint作为开源APM工具,通过无侵入式Java字节码增强技术,为大规模分布式系统提供全链路追踪能力,让调用链可视化成为现实。 ## 🔧 问题导入:分布式系统的监控困境 现代微服务架构中,一个用户请求可能涉及数十个服务的协作调用。传统监

gitblog_00886的博客 814

深度学习之Pytorch---本人踩过的坑(报错总结)第十篇

深度学习之Pytorch安装时遇到的问题—本人踩过的坑(报错总结) 报错一:pip install torchvision 出现“由于目标计算机积极拒绝,无法连接”的问题 解决方案:找到自己浏览器的工具或选项,我的是火狐,具体解决方案如下图 然后找到桌面左下角,点击搜索internet,然后点击internet选项 最后回到Anaconda Prompt命令行输入pip install...

qq_41570307的博客 1914

InterfaceAudience 简单介绍

文章目录InterfaceAudience 简单介绍背景介绍源码解释 InterfaceAudience 简单介绍 背景 学习hbase源码中,经常看到有这样的注解InterfaceAudience, 不太理解是什么意思,所以进行资料查阅,并结合hbase中的源码进行总结一下 介绍 源码 // // Source code recreated from a .class file by Int...

qq1010234991的博客 1806

【深度学习】肺结节分割项目实战二:分割肺实质

在后续训练模型的时候如果直接使用原始的肺部CT图像,其中的非肺区域会对训练造成干扰,因此我们需要提取分割肺实质。这一部分参考了kaggle上的教程。 从这张CT图像中可以看出扫描器以外的部分为黑色,背景和肺内部颜色较深,非肺组织和骨头颜色较浅。我们的目的是将肺部分割出来。由于肺部区域和其他部分对比明显,我们可以设置一个合适的阈值对图像中的区域进行隔离。 import argparse import os import numpy as np from medpy.filter.smoothing imp

weixin_42182906的博客 7241

Labview调用C++ dll之字符串数组传递

做项目的时候碰到了一个需求,有一个复杂的运算,用labview实现非常的麻烦,但是如果用C++实现,就会灵活很多。尝试着采用Labview调用C++编写的动态链接库方式解决,兼顾Labview的便利和C++的灵活性。 运算好说,主要难点是Labview与C++之间的数据对应关系,因为我最后的结果是既有字符串又有数字,对于单纯的数字来说,直接通过调用数组的方式就能解决,这里主要记录一下字符串数组...

bgbgx的博客 6809

关于hbase中注解的理解 转载

转载自:http://www.linuxidc.com/Linux/2012-09/70620.htm InterfaceAudience 类包含三个注解类型,用来被说明被他们注解的类型的潜在的使用范围(audience)。 @InterfaceAudience.Public: 对所有工程和应用可用 @InterfaceAudience.LimitedPrivate: 仅限于某些特定工程

myrainblues的专栏 949

【Claude】Not logged in 错误:未登录状态的判断与 /login 认证路径 bug报错已解决

login 是首选修复:大多数 "Not logged in" 只需重新执行 /login检查系统时间:时间偏差是 Token 验证失败的常见原因避免密钥库被清理:将 Claude Code 添加到系统清理工具的白名单企业环境用 API Key:如果组织禁用 OAuth,使用 API Key 认证区分凭证类型:理解 Not logged in(无凭证)vs Invalid key(有但无效)

博客 7314

idea常做的配置改动和常用插件

撤销:ctrl+z恢复:ctrl+shift+z (可能和搜狗输入法冲突回到最后编辑位置:ctrl+shift+backspace回到上一处:ctrl+alt+左右箭头(类似Eclipse的alt+左右箭头)修改impl希望intf方法同步新增impl方法,intf中没有,可以alt+enter自动生成在intf中如果impl和intf中都有该方法,想要增减方法入参、修改入参类型是不行的,用alt+enter会重新生成新的。当然可以手动删除旧的。

w8y56f的专栏 1330

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

分布式系统链路追踪简述

链路追踪

Mark_Australia的博客 1513

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

10张图带你入门分布式链路追踪系统原理

本文github/SmileLionCoder已收录,有Java程序员进阶技术知识地图以及我的系列文章,欢迎大家Star。 分布式系统为什么需要链路追踪? 随着互联网业务快速扩展,软件架构也日益变得复杂,为了适应海量用户高并发请求,系统中越来越多的组件开始走向分布式化,如单体架构拆分为微服务、服务内缓存变为分布式缓存、服务组件通信变为分布式消息,这些组件共同构成了繁杂的分布式网络。 假如现在有一个系统部署了成千上万个服务,用户通过浏览器在主界面上下单一箱茅台酒,结果系统给用户提示:系统内部错误

tbdp6411的专栏 472

zipkin链路追踪_原来10张图就可以搞懂分布式链路追踪系统原理

分布式系统为什么需要链路追踪?随着互联网业务快速扩展,软件架构也日益变得复杂,为了适应海量用户高并发请求,系统中越来越多的组件开始走向分布式化,如单体架构拆分为微服务、服务内缓存变为分布式缓存、服务组件通信变为分布式消息,这些组件共同构成了繁杂的分布式网络。微服务架构(极简版)假如现在有一个系统部署了成千上万个服务,用户通过浏览器在主界面上下单一箱茅台酒,结果系统给用户提示:系统内部错误,相信用户...

weixin_39865061的博客 349

全链路监控:方案概述与比较

文章目录一、问题背景二、目标要求1、探针的性能消耗2、代码的侵入性3、可扩展性4、数据的分析三、功能模块1、埋点与生成日志2、收集和存储日志3、分析和统计调用链路数据,以及时效性4、展现以及决策支持四、Google Dapper1、Span2、Trace4、Annotation5、调用示例5.1、请求调用示例5.2、调用过程追踪5.3、调用链核心工作5.4、整体部署架构5.5、AGENT 无侵入部署5.6、调用链监控好处五、方案比较1、探针的性能2、collector 的可扩展性3、 全面的调用链路数据分析

7DGroup,让技术更有价值! 984

10张图搞懂分布式链路追踪系统原理!

分布式链路追踪就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。链路跟踪主要功能:故障快速定位:可以通过调用链结合业务日志快速定位错误信息。链路性能可视化:各个阶段链路耗时、服务依赖关系可以通过可视化界面展现出来。链路分析:通过分析链路耗时、服务依赖关系可以得到用户的行为路径,汇总分析应用在很多业务场景。分布式链路追踪就是将每一次分布式请求还原成调用链路。

cxytony的博客 156

注解的应用

注解的应用                公司项目需求,自己做一个对HBase应用ORM思想,封装DAO,应用到注解。这里复习一下注解的使用。 1.注解的定义::注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。 作用

菜菜的博客 418

原来10张图就可以搞懂分布式链路追踪系统原理

蝉之洞 670
上一篇: HBase_rowkey的设计
下一篇: HBase_ 协处理器的实用技巧
First_____
博客等级 码龄6年 132粉丝 150原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值