我正在尝试创建@Around
注释以制作Prometheus
指标。
方面:
@Around("@annotation(TimeMetric)")
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
// duration.startTimer();
Object object = joinPoint.proceed();
// durationTimer.setDuration();
return object;
}
控制器:
@TimeMetric
@GetMapping(path = "")
Mono<SomeResult> health() {
return Mono.just(service.doSomeJob());
}
我的预期行为是:
我将获得没有执行时间
service.doSomeJob()
的指标,就像我一样 返回Mono
。
但是当我得到结果时,我看到了:
结果指标包括预期时间
service.doSomeJob()
Aspect
会阻止我的方法或诀窍吗?我试图找到一些性能遗漏?
答案 0 :(得分:1)
在这个方法中只包装一个同步值:
Mono.just(service.doSomeJob());
因此同步调用service.doSomeJob()
(我希望它不会阻塞I / O ......)并且在构建反应流水线时直接花费在其上的时间。