Mule 如何停止执行流引用,直到完成整个批处理?

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

在我的项目中,我正在读取一个巨大的tsv文件(大约820k),并将记录处理到db中。我有一个执行验证的java文件,在验证之后,我将记录存储在一个列表中。因为我无法将整个列表发送到vm,所以我将列表拆分为2000并发送到流。以下是我如何发送2000条记录

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连接器。您可以将其配置为使用事件生成器作业。在我的情况下可能会有效果。