查找处理骡子流所需的时间

时间:2017-05-04 08:47:09

标签: java mule batch-processing anypoint-studio

我目前正在尝试检查骡子流的时间,如果有帮助,我的Mule ESB版本是3.8.3。

我正在使用<custom-inteceptor>来完成这项任务,从而创建了一个扩展AbstractEnvelopeInterceptor类的Java类,代码如下,

@Override
public MuleEvent last(MuleEvent event, ProcessingTime time, long startTime, boolean exceptionWasThrown)
        throws MuleException 
{

    long endTime = System.currentTimeMillis();

    if(logger.isInfoEnabled())
    {
    logger.info("+++++++++++++++++++++++++++++++++++++++++++++"
            +" Flow : "+event.getFlowConstruct().getName()
            + " Started @ " +startTime+" Ended @ "+endTime
            +" Processing Time : "+(endTime - startTime)+" ms "
            + "+++++++++++++++++++++++++++++++++++++++++++++");

    }
    return event;
}

我在尝试获取流程名称时收到java.lang.NullPointerException,即event.getFlowConstruct().getName(),如上所示

即使我将其删除以仅检查流程处理所花费的时间,它也会给出0 ms作为输出,同样我的批处理过程在consol中打印后也不会执行

我试图将<custom-inteceptor>置于开始和流程的结尾,但由于某种原因仍然给我0毫秒

流程如下,

<flow name="batch-sample-1Flow">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/bs" doc:name="HTTP"/>
    <custom-interceptor class="com.utility.CustomTimeInteceptor"/>
    <batch:execute name="batch-sample-1Batch" doc:name="batch-sample-1Batch"/>

</flow>

是的我正在调用批处理过程,在调用批处理之前放置<custom-inteceptor>时不会执行该批处理。

如果有其他方法可以监控批处理过程,我们将不胜感激。

修改

我正在扩展AbstractEnvelopeInterceptor类是否与使用它有关?

2 个答案:

答案 0 :(得分:0)

只需使用类 AbstractInterceptingMessageProcessor 拦截器接口来创建自定义拦截器......并执行此类编码以创建自定义拦截器

private static Log logger = LogFactory.getLog(TimerInterceptor.class);

public MuleEvent process(MuleEvent event) throws MuleException {
long startTime = System.currentTimeMillis();
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date stdate = new Date();
String start = dateFormat.format(stdate);
System.out.println(start);

MuleEvent resultEvent = processNext(event);

Date enddate = new Date();
String end = dateFormat.format(enddate);

if (logger.isInfoEnabled()) {

long executionTime = System.currentTimeMillis() - startTime;
        logger.info("Custom Timer : "+resultEvent.getFlowConstruct().getName() + " Start at "+start+" and end at "+end +" it took " + executionTime + "ms to process event ["       + resultEvent.getId() + "]");
}
return resultEvent;
}

答案 1 :(得分:0)

Mule已为此内置了组件let points, bounds; points = bounds = []; for(let i=0; i < this.markers.length; i++){ if(!this.map.hasLayer(this.markers[i])){ this.map.addLayer(this.markers[i]); let p = new L.latLng(this.markers[i].getLatLng().lat, this.markers[i].getLatLng().lng); points.push(p); this.oms.addMarker(this.markers[i]) }; } this.map.fitBounds([points]); 。我可以放在流程中。

CURRENT_HEROKU_USER="$CURRENT_HEROKU_USER" rails c --app my-app-name

> Running CURRENT_HEROKU_USER=chap@heroku.com rails c...

ENV['CURRENT_HEROKU_USER']

> "chap@heroku.com" 

处理时间将成为应用程序日志的一部分。在https://docs.mulesoft.com/mule-runtime/3.9/using-interceptors#timer-interceptor

中了解更多信息