为什么要监控

服务化接口是提供服务的,接口正确性、稳定性是最最重要的,在保证正确的同时需要尽量提高接口响应时间。

有的团队会有专门的工具来对系统响应时间、吞吐量做监控,但如果团队没有这种“待遇”就需要自己来做一些工具为自己的代码提供服务。

自己动手,丰衣足食

AOP + Annotation 简陋实现,能达到目的

AOP : 使用环绕方式对接口拦截,在拦截接口前后记录时间最后计算用时

Annotation : 自定义注解在接口上设置超时时间(timeout)和超时是否发送邮件选项(emailIfTimeout)

通过对接口实际执行时间和配置的超时时间比较,系统可以计算出接口是否超时,此时可使用日志(或其他能通知到开发人员的方式)记录具体哪个接口、什么参数以及执行时间

注解可以提供更多的选项,来为自己接口服务,比如支持注解到类上,批量为接口设置了默认超时时间、支持日志中显示的处理方法名称 等等...

代码实施

接口Annotation定义

/**

* 接口自定义属性

*

* @author tianshu on 16/8/30 下午4:55.

*/

@Target(value = {ElementType.METHOD})

@Retention(RetentionPolicy.RUNTIME)

public @interface InterfaceProperty {

/**

* 接口超时时间,单位毫秒.默认值100毫秒

* @return 设置的超时时间

*/

int timeout() default 400;

/**

* 当接口响应超时时,是否发送邮件.默认发送

* @return 返回ture需要发送邮件

*/

boolean emailIfTimeout() default true;

}

AOP实现

/**

* @author tianshu on 16/1/28 下午10:35.

*/

@Component

@Aspect

public class SystemRequestAspect {

/** 日志 */

private static final Logger LOG = LoggerFactory.getLogger(SystemRequestAspect.class);

/** 接口超时日志 */

private static final Logger INTERFACE_TIMEOUT_LOG = LoggerFactory.getLogger("INTERFACE_TIMEOUT_LOG");

@Around(value = "execution(* com.xx.xx.xx.xx..*.*(..))", argNames="pjp")

public Object validator(ProceedingJoinPoint pjp) throws Throwable {

Object[] args = pjp.getArgs();

/** 拦截的方法名称 */

String methodName = pjp.getTarget().getClass().getSimpleName() + "." + pjp.getSignature().getName();

try {

long start = System.currentTimeMillis();

Object obj = pjp.proceed(args);

long finish = System.currentTimeMillis();

long useTime = finish - start;

/** 接口响应时间监控 */

interfaceUseTimeMonitor(pjp.getTarget().getClass(), pjp.getSignature().getName(), args, useTime);

return obj;

} catch(Throwable e) {//处理你的异常

} finally {//处理其他

}

}

/**

* 接口响应时间监控

*

* @param targetClass 接口实现class

* @param methodName 接口方法

* @param args 接口如参

* @param useTime 调用接口实际使用时间

*/

private void interfaceUseTimeMonitor(Class targetClass, String methodName, Object[] args, long useTime) {

/** 与接口注解最高用时做比较,符合条件发送邮件 */

try {

Class[] classArray = new Class[args.length];

for(int i = 0; i < args.length ; ++i) {

classArray[i] = args[i].getClass();

}

Method method = targetClass.getMethod(methodName, classArray);

if(method.isAnnotationPresent(InterfaceProperty.class)) {

InterfaceProperty interfaceProperty = method.getAnnotation(InterfaceProperty.class);

if(useTime >= interfaceProperty.timeout()) {

if(INTERFACE_TIMEOUT_LOG.isInfoEnabled()) {

INTERFACE_TIMEOUT_LOG.info("接口超时,interface:[{}].useTime:[{}].settingUseTime:[{}].traceId:[{}]",

new Object[]{targetClass.getSimpleName() + "." + methodName,

useTime, interfaceProperty.timeout(), TraceUtils.getTrace()});

}

}

}

} catch(Throwable e) {

/** 监控逻辑处理错误什么都不做 */

}

}

}

原文:http://www.cnblogs.com/sealedbook/p/6065343.html

java 监控 m_Java接口响应超时监控相关推荐

  1. 第三方支付接口响应超时处理方法

    问题:调用第三方支付接口超时怎么办? 解决方法:调用接口时设置超时时间,当接口超过60秒未返回结果,自动将改订单设置为处理中,然后由定时任务调用查询接口,同时如果用户下拉刷新页面也会发起单笔交易查询. ...

  2. 生产事故总结篇(2) 接口响应超时优化方案

    1 查询类接口 一 mysql数据库查询超时问题 1 查询字段是否存在索引,索引是否失效 索引是个老生常谈的问题了, 需要特别注意下面几个点 唯一的值必须要建立唯一索引 比如订单号,售后单号,上门取件 ...

  3. java接口经常变动前端怎么办_Java进程故障排查(CPU资源占用高,接口响应超时,功能接口停滞等)...

    故障分析 # 导致系统不可用情况(频率较大): 1)代码中某个位置读取数据量较大,导致系统内存耗尽,进而出现Full GC次数过多,系统缓慢: 2)代码中有比较消耗CPU的操作,导致CPU过高,系统运 ...

  4. 监控显示登录服务器超时,监控连接服务器超时怎么解决

    监控连接服务器超时怎么解决 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 云耀 ...

  5. tomcat服务器接口响应超时,Tomcat请求超时

    如果您试图阻止请求运行太长时间,那么在Tomcat中设置超时将无济于事.正如克里斯所说,您可以为Tomcat设置全局超时值.但是,从" Apache Tomcat连接器-通用方法超时&quo ...

  6. 接口访问超时 504 Gateway Time-out 优化方案

    我们在调用GET请求获取数据的接口中,由于接口的处理逻辑复杂.查询的数据库表过多.nginx设置的超时时间过短和慢sql等原因,会造成接口请求了20秒左右,都没有结果返回,浏览器就会报错504 Gat ...

  7. java 接口超时控制_Java接口请求响应超时的解决办法

    最近在做报表需求的时候,遇到一个问题: 前台给个请求,由于后台执行逻辑需要很长时间,因此导致页面响应超时. 在网上查询相关资料,找到了几种解决方案: 通过修改配置文件,延长响应时间: rest.Rea ...

  8. 淘宝天猫京东拼多多苏宁抖音等平台关键词监控价格API接口(店铺商品价格监控API接口调用展示)

    淘宝京东拼多多苏宁抖音等平台关键词监控价格API接口(店铺商品价格监控API接口调用展示)代码对接如下: 1.公共参数 名称 类型 必须 描述 key String 是 调用key(必须以GET方式拼 ...

  9. 淘宝天猫京东拼多多抖音苏宁1688等平台关键词监控价格API接口(店铺商品价格监控API接口调用展示)

    淘宝天猫京东拼多多抖音苏宁1688等平台关键词监控价格API接口(店铺商品价格监控API接口调用展示)代码对接如下: 1.公共参数 名称 类型 必须 描述 key String 是 调用key(必须以 ...

最新文章

  1. Android Handler sendMessage和 sendMessageDelayed的使用
  2. Oracle11.2新特性之listagg函数 (行列转换)
  3. 理解 Android Build 系统
  4. 计算机争夺战作文,电脑争夺战作文600字
  5. 小象电商是采用JAVA开发的B2B2C多用户商城系统。
  6. 无限极评论怎么删除php,TP5 无限极评论回复
  7. web 前端 如何分享到instagram_面对前端的后端化趋势,2020该如何学习web前端?
  8. python将txt读入矩阵_python读入txt数据,并转成矩阵
  9. python无法显示饼图
  10. 无法定位程序输入点 except_python自制王者荣耀抽卡程序
  11. 优化算法之——最速下降法
  12. 安卓投屏大师_【投屏】全平台全设备无线投屏工具幕享
  13. 我将出席 .NET Day in China 的圆桌讨论:探讨开发者就业话题
  14. LifecycleBeanPostProcessor的作用
  15. 三国群英传服务器维护是几点,20191112维护公告
  16. 阿里云机器的JVM内存调优经历(菜鸟必看,大神请绕道)
  17. C++:未定义引用静态类成员?
  18. html语言简介 ppt,网页制作与HTML语言基本结构简介.ppt
  19. 【历史上的今天】6 月 4 日:微软收购 Github;MacOS Mojave 推出;英特尔发布第四代架构 Haswell
  20. 快手签名算法php,2019 快手API签名算法

热门文章

  1. 【ACM-ICPC 2018 南京赛区网络预赛 E】AC Challenge
  2. 从零玩转jQuery之项目开发(QQ音乐播放器)
  3. 2022-04-14 工作记录--LayUI-数据表格中固定列对应的合计部分也实现固定
  4. 通过shell脚本消耗cpu与内存
  5. 测试管理之--团队组建
  6. TCL爱奇艺再次联姻 共同打造国际微电影节
  7. Windows下安装pycocotools(本人亲测,可以解决)
  8. 【财务管理论文】大数据背景下企业财务管理的挑战与机遇(节选)
  9. 用友NC6财务共享服务助企业财务管理转型升级
  10. 一文了解什么是财务RPA机器人