为什么批量范围在尝试加载巨大记录 - 骡子ESB时表现得很奇怪

时间:2014-10-29 23:16:23

标签: mule batch-processing mule-studio mule-component

我正面临批处理过程记录阶段的问题,请建议 - 我正在尝试加载一些KB文件(大约有5000条记录)。对于成功案例,它有效。 如果假设第一次命中的输入阶段发生错误并且流停止,则第二次尝试命中同一记录时。 Mule在流程记录步骤中停止执行。它未运行加载阶段。请在下面找到运行时间日志

11:55:33  INFO  info.org.mule.module.logging.DispatchingLogger - Starting loading phase for   instance 'ae67601a-5fbe-11e4-bc4d-f0def1ed6871' of job 'test'
11:55:33  INFO  info.org.mule.module.logging.DispatchingLogger - Finished loading phase for instance ae67601a-5fbe-11e4-bc4d-f0def1ed6871 of job order. 5000 records were loaded
11:55:33  INFO  info.org.mule.module.logging.DispatchingLogger - **Started execution of instance 'ae67601a-5fbe-11e4-bc4d-f0def1ed6871' of job 'test**

它在实例启动后停止处理 - 我不确定这里发生了什么。 当我停止流程并从工作区中删除 .mule 文件夹时。它然后工作。 我希望在使用临时队列加载阶段mule时,在输入阶段发生异常时不会自动删除它,但不确定这可能是真正的原因。

我无法实时删除.muleFolder。

你可以请任何人在这里建议是什么造成这种奇怪的行为。如何摆脱这个问题。请找config xml

  <batch:job name="test">
    <batch:threading-profile poolExhaustedAction="WAIT"/>
    <batch:input>

        <component class="com.ReadFile" doc:name="File Reader"/>
        <mulexml:jaxb-xml-to-object-transformer returnClass="com.dto" jaxbContext-ref="JAXB_Context" doc:name="XML to JAXB Object"/>
        <component class="com.Transformer" doc:name="Java"/>
    </batch:input>
    <batch:process-records>
        <batch:step name="Batch_Step" accept-policy="ALL">
            <batch:commit doc:name="Batch Commit" streaming="true">

                <logger message="************after Data mapper" level="INFO" doc:name="Logger"/>
                <data-mapper:transform config-ref="Orders_Pojo_To_XML"  stream="true" doc:name="Transform_CanonicalToHybris"/>
                <file:outbound-endpoint responseTimeout="10000" doc:name="File" path="#[sessionVars.uploadFilepath]"">        

         </file:outbound-endpoint>       
            </batch:commit>
        </batch:step>
    </batch:process-records>
    <batch:on-complete>

       <set-payload value="BatchJobInstanceId:#[payload.batchJobInstanceId+'\n'], Number of TotalRecords: #[payload.totalRecords+'\n'], Number of loadedRecord: #[payload.loadedRecords+'\n'],  ProcessedRecords: #[payload.processedRecords+'\n'], Number of sucessfull Records: #[payload.successfulRecords+'\n'], Number of failed Records: #[payload.failedRecords+'\n'], ElapsedTime: #[payload.elapsedTimeInMillis+'\n'], InpuPhaseException #[payload.inputPhaseException+'\n'], LoadingPhaseException: #[payload.loadingPhaseException+'\n'], CompletePhaseException: #[payload.onCompletePhaseException+'\n'] " doc:name="Set Batch Result"/>

        <logger message="afterSetPayload: #[payload]" level="INFO" doc:name="Logger"/> 

        <flow-ref name="log" doc:name="Logger" />     

    </batch:on-complete>

我对这种行为感到震惊很长一段时间。非常感谢您的帮助。 版本:3.5.1 提前谢谢。

1 个答案:

答案 0 :(得分:2)

将max-failed-records设置为-1,这样即使出现异常,批处理作业也会继续 <batch:job name="test" max-failed-records="-1">

在实时环境中,你没有清理.mule文件夹的情况

只有在使用Anypoint Studio

时才会发生这种情况