响应时间(response time 简称 RT)是从系统接收请求开始到返回响应之间的时间跨度,是一项极其重要的性能指标。它可以从侧面反映系统的整体吞吐量,也是业务请求的性能好坏的判断依据。
文章目录
一.RT时间实现思路
一般都是对各个服务请求记录相关的服务请求时长,实现思路如下:在每个请求的开始和结束都分别计算一下时长。后续为了方便使用,索性就抽离出通过注解标记来标记需要记录RT时间的服务。
二.具体实现
/**
* @description 系统日志注解标记
* @author Vainycos
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SysLog {
String value() default "";
}
/**
* 系统日志切面
*/
@Slf4j
@Aspect
@Component
public class SysLogAspect {
@Pointcut("@annotation(com.vainycos.aop.SysLog)")
public void logPointCut() {}
/**
* 环绕通知 @Around , 当然也可以使用 @Before (前置通知) @After (后置通知)
* @param point
* @return
* @throws Throwable
*/
@Around("logPointCut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
long beginTime = System.currentTimeMillis();
Object result = point.proceed();
// 执行时间
long time = System.currentTimeMillis() - beginTime;
MethodSignature signature = (MethodSignature) point.getSignature();
// 类名
String className = point.getTarget().getClass().getName();
// 方法名
String methodName = signature.getName();
log.info("className->{}, methodName->{}, RT->{}ms", className, methodName, time);
return result;
}
}
以上是关键实现代码,接下来我们只要在需要监听RT的方法名上加上@SysLog注解即可,例如:
@RequestMapping("/req/v1/util")
@RestController
public class TestController {
@SysLog("test")
void testRt(){
// 模拟2s服务请求时长
Thread.sleep(2000);
}
}
参考资料:
版权声明:本文为imVainiycos原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。