我想计算我的m子流执行所需的执行时间,因此我使用了拦截器,这是我的拦截器代码
class CustomLoggerInterceptor extends AbstractEnvelopeInterceptor { @Override public MuleEvent last(MuleEvent event, ProcessingTime time, long startTime, boolean exceptionWasThrown) throws MuleException { long totalTime=time.getStatistics().getTotalProcessingTime(); LOG.info("Start time for flow: "+event.getFlowConstruct().getName()+" is: "+startTime+" total execution time is: "+totalTime); return event; } //other inherited methods }
现在的问题是,每当我执行m子流程时,我从中获得的所有值time.getStatistics().getTotalProcessingTime()始终为“ 0”。
time.getStatistics().getTotalProcessingTime()
我使用的是正确的方法还是犯了一些错误?
我基本上需要一种从ProcessingTime对象中查找执行时间的方法。
ProcessingTime
任何指针赞赏
谢谢!
您可以通过以下两种方法来做到这一点:
1)使用 计时器拦截器 :
<timer-interceptor />
把它放在流程的尽头
2)使用 自定义拦截器 创建自己的 计时器拦截器 :
在流程结束时使用它:-
<custom-interceptor class="com.customInterceptor.TimerInterceptor" />
和com.customInterceptor.TimerInterceptor类:-
import org.mule.api.MuleEvent; import org.mule.api.MuleException; import org.mule.api.interceptor.Interceptor; import org.mule.processor.AbstractInterceptingMessageProcessor; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * <code>TimerInterceptor</code> simply times and displays the time taken to * process an event. */ public class TimerInterceptor extends AbstractInterceptingMessageProcessor implements Interceptor { /** * logger used by this class */ private static Log logger = LogFactory.getLog(TimerInterceptor.class); public MuleEvent process(MuleEvent event) throws MuleException { long startTime = System.currentTimeMillis(); MuleEvent resultEvent = processNext(event); if (logger.isInfoEnabled()) { long executionTime = System.currentTimeMillis() - startTime; logger.info("Custom Timer : "+resultEvent.getFlowConstruct().getName() + " took " + executionTime + "ms to process event [" + resultEvent.getId() + "]"); } return resultEvent; } }