Mule 如何停止执行流引用,直到完成整个批处理?
在我的项目中,我正在读取一个巨大的tsv文件(大约820k),并将记录处理到db中。我有一个执行验证的java文件,在验证之后,我将记录存储在一个列表中。因为我无法将整个列表发送到vm,所以我将列表拆分为2000并发送到流。以下是我如何发送2000条记录Mule 如何停止执行流引用,直到完成整个批处理?,mule,anypoint-studio,Mule,Anypoint Studio,在我的项目中,我正在读取一个巨大的tsv文件(大约820k),并将记录处理到db中。我有一个执行验证的java文件,在验证之后,我将记录存储在一个列表中。因为我无法将整个列表发送到vm,所以我将列表拆分为2000并发送到流。以下是我如何发送2000条记录 while(i < validRecords.size()){ int j = i + 2000; if( j < validR
while(i < validRecords.size()){
int j = i + 2000;
if( j < validRecords.size())
{
muleClient.dispatch("vm://validRecordsEtoc", validRecords.subList(i, j), msgProperties);
}
else
{
muleClient.dispatch("vm://endRecordsEtoc", validRecords.subList(i,validRecords.size()-1), msgProperties);
}
i = i + 2000;
}
while(i
我有一个流,它引用了一个批并将记录处理到数据库中。
这里是流程
<flow name="csv-source-inputFlow_Clean_etoc">
<vm:inbound-endpoint exchange-pattern="one-way" path="validRecordsEtoc" doc:name="VM_TFO_ETOC_SUBS_SRC"/>
<enricher doc:name="Enrich inbound Message Properties">
<logger message="Etoc source message enricher : BatchId : #[message.inboundProperties.flow_batch_id] Total Records : #[message.inboundProperties.totalRecordCount] Successful Records : #[message.inboundProperties.successRecordCount]" level="INFO" doc:name="Logger"/>
<enrich source="#[message.inboundProperties.'flow_batch_id']" target="#[flowVars.flow_batch_id]"/>
<enrich source="#[message.inboundProperties.'flow_source_name']" target="#[flowVars.flow_source_name]"/>
<enrich source="#[message.inboundProperties.'successRecordCount']" target="#[flowVars.successRecordCount]"/>
<enrich source="#[message.inboundProperties.'totalRecordCount']" target="#[flowVars.totalRecords]"/>
<enrich source="#[message.inboundProperties.'input_file_name']" target="#[flowVars.input_file_name]"/>
</enricher>
<batch:execute name="csv-source-inputBatch_ETOC" doc:name="csv-source-inputBatch_ETOC"/>
</flow>
<batch:job name="csv-source-inputBatch_ETOC">
<batch:input>
<set-payload value="#[payload]" doc:name="Set Payload_TFO_ETOC"/>
</batch:input>
<batch:process-records>
<batch:step name="TFOETOC_CLEAN_Batch_Step">
<batch:commit size="2000" doc:name="TFO_ETOC Clean Batch Commit">
<db:insert config-ref="LocalhostPostgres" bulkMode="true" doc:name="Enrich_TFO_ETOC_Src_Data">
<db:parameterized-query><![CDATA[INSERT INTO public."csv_tfo_3.4.1 etoc subs"(
seq_id, batch_id, publication, code, first_name,
last_name,subscription_date, email, marketable ,
organization, department, address1 ,
address2, city, state,
zip_code, country, phone,
status, source)
values (DEFAULT,#[flowVars.flow_batch_id],#[payload.Publication] , #[payload.Code] , #[payload.First_Name],#[payload.Last_Name], to_timestamp(#[payload.Subscription_Date],'yyyy-mm-dd hh24:mi:ss'),#[payload.Email],#[payload.Marketable],#[payload.Organization],#[payload.Department],#[payload.Address1],#[payload.Address2],#[payload.City],#[payload.State],#[payload.Zip_Code],#[payload.Country],#[payload.Phone],'pending','TFO')]]></db:parameterized-query>
</db:insert>
</batch:commit>
</batch:step>
</batch:process-records>
</batch:job>
当我处理最后一个列表时,我将发送到另一个流,因为我需要在完成时调用子流,在这里,我的最后一个vm在前面的列表执行之前执行
我点击了下面的链接
有人能告诉我怎么做吗?请添加最后一批时调用的另一个流。“VM://EndoRordStoc”流程。考虑使用QUATRZ连接器。您可以将其配置为使用事件生成器作业。在我的情况下,它可能会工作。请添加在最后一批时调用的其他流。“VM://EndoRordStoc”流程。考虑使用QUATRZ连接器。您可以将其配置为使用事件生成器作业。在我的情况下可能会有效果。