小编典典

使用拦截器计算a子流的处理时间

java

我想计算我的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”。

我使用的是正确的方法还是犯了一些错误?

我基本上需要一种从ProcessingTime对象中查找执行时间的方法。

任何指针赞赏

谢谢!


阅读 237

收藏
2020-11-30

共1个答案

小编典典

您可以通过以下两种方法来做到这一点:

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;
    }
}
2020-11-30