【发布时间】:2020-06-03 10:57:55
【问题描述】:
我是 mulesoft 的新手,有一个关于批处理的问题。如果批处理在两者之间崩溃并且一些记录已经处理,当批处理重新开始时会发生什么。重复数据???
【问题讨论】:
我是 mulesoft 的新手,有一个关于批处理的问题。如果批处理在两者之间崩溃并且一些记录已经处理,当批处理重新开始时会发生什么。重复数据???
【问题讨论】:
它将尝试继续处理批处理队列中的待处理数据,除非它被崩溃损坏。
【讨论】:
答案取决于几件事。首先,除非您将批处理作业范围配置为允许记录级别失败,否则当记录失败时整个作业将停止。其次,如果您确实配置为允许失败,那么批处理将继续处理所有记录。在这种情况下,可以将每个批处理步骤配置为仅接受成功的记录(默认),或仅接受失败的记录,或所有记录。
所以你的问题的答案取决于配置。
至于重复数据,这部分完全取决于您。
如果您因失败而停止作业,当您重新启动它时,您当时提供的记录集将是已处理的记录集。如果您提交之前已经处理过一次的记录,那么它们将被再次处理。您可以在重新进入批处理作业时或在成功处理记录时提供过滤。
【讨论】:
在回答您的问题之前,我想知道几件事。 一种。批量崩溃是什么意思? 你是说在批处理期间有一些 JVM 命中并且 批处理又开始了?
或者批次处理部分记录失败?
a.1 --> 如果 JVM 命中则整个程序停止。 需要重新启动程序。这导致处理 同一组记录。
a.2 --> 批量处理失败记录。 在批处理步骤中,您可以执行以下三个步骤。
将批处理作业设置为不考虑任何错误继续进行
<batch:job jobName="Batch1" maxFailedRecords="-1">
在批处理作业中创建 3 个批处理步骤:-
a.processRecord.- process the 1st record in batch
queue.
b.ProcessSuccessful-
if there is no exception in a. go to batch step b.
c.processFailure record.-
if there is exception in a. goto batch step. c
整个示例代码如下所示。
<batch:job jobName="batchJob" maxFailedRecords="-1" >
<batch:process-records>
<batch:step name="processRecord" acceptPolicy="ALL" >
log.info("process any record COMES IN THE STEP");
</batch:step>
<batch:step name="ProcessSuccessful"
acceptPolicy="NO_FAILURES">
log.info("process only SUCCESSFUL record")
</batch:step>
<batch:step name="processFailure"
acceptPolicy="ONLY_FAILURES">
log.info("process only FAILURE record");
</batch:step>
</batch:process-records>
<batch:on-complete>
log.info("on complete phase , log the successful and
failure count");
</batch:on-complete>
</batch:job>
N.B --> Mule 4.0 的代码。
【讨论】: