Spring Aspect + WebFlux。有什么行为?

时间:2018-04-23 17:43:31

标签: spring-aop spring-webflux

我正在尝试创建@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会阻止我的方法或诀窍吗?我试图找到一些性能遗漏?

1 个答案:

答案 0 :(得分:1)

在这个方法中只包装一个同步值:

Mono.just(service.doSomeJob());

因此同步调用service.doSomeJob()(我希望它不会阻塞I / O ......)并且在构建反应流水线时直接花费在其上的时间。