我正在尝试为NIO实现时间方法执行的方面。
基本上,我需要在最初调用方法时获取时间,然后在触发回调时(回调始终是fail()或succeeded()调用 - 所以我需要将初始方法调用与适当的回调。
我有以下实现,但除非是连续调用,否则它将无效。当然不是这种情况。
任何帮助都会很棒
public aspect TimerAJ {
private long timer = 0;
private String methodName;
private static Logger logger = LoggerFactory.getLogger(TimerAJ.class);
//the call to the call back method
pointcut timerCall1() : target(io.vertx.core.AsyncResult) && (call( * io.vertx.core.AsyncResult.failed(..)) || call( * io.vertx.core.AsyncResult.succeeded(..)));
//the call to the method itself
pointcut timerCall2() : execution(@Timer * *(..));
before() : timerCall2() {
timer = System.currentTimeMillis();
methodName = methodSignature.getName();
}
after() : timerCall1() {
logger.info(methodName + " " + String.format("%s took %d ms", thisEnclosingJoinPointStaticPart.getSourceLocation().getWithinType().getName(), (System.currentTimeMillis() - timer)));
}
}
答案 0 :(得分:0)
您需要重新考虑这种方法,因为它根本不适用于Vert.x。
您尝试执行的操作是在调用@Timer
方法时开始计算,并在任何 AsyncResult
返回时停止计数。
您可以做什么:使用vertx.eventBus().publish()
发送开始/停止指标。使用其他Verticle来收集vertx.eventBus().consumer()
的指标并显示它们。
另外,请查看Vert.x Dropwizard Metrics。如果你想要的只是实际的统计数据,他们会为你提供,没有太多的实施。