我曾经使用循环来将数据上传到云端,但它是顺序的。我正在浏览集合拆分器link,根据文档给出它应该异步处理数据。使用的目的是我有大量的数据要上传,带VM的收集拆分器根据文件帮我。
1)有没有不同的处理方式?
2)如果我将VM作为请求/响应而不是在途中,我的进程将变为顺序而不是并发,如文档中所述:
然而,有一个关键区别:消息的每个部分 将同时处理而不是按顺序处理。如果你 将您的应用程序部署到服务器群集,这将对其产生重大影响 性能
但是当它是请求/响应时,它正在等待响应,当它正在等待响应时,另一个进程启动还是等待完成更早的线程完成?
如果我将进程设置为单向并使用文档中描述的重定序器和集合聚合器,则在完成数据库状态更新之前执行此步骤。 流速:
<flow name="psi2sfdc-VM">
<vm:inbound-endpoint exchange-pattern="one-way" path="uploadSfdc" connector-ref="VM" doc:name="UploadSFDC"/>
<choice doc:name="Choice">
<when expression="#[flowVars.sfdcId!=null]">
<db:update config-ref="PSI_Database_Configuration" doc:name="Processed">
<db:parameterized-query><![CDATA[UPDATE client SET status = 'done' WHERE client_id = #[flowVars.clientId]]]></db:parameterized-query>
</db:update>
<logger level=INFO, message="Db Update"/>
</when>
<otherwise>
<logger message="else block" level="INFO" doc:name="Logger"/>
</otherwise>
</choice>
<resequencer failOnTimeout="false" doc:name="Resequencer"/>
<collection-aggregator failOnTimeout="false" doc:name="Collection Aggregator"/>
<logger level=INFO, message="Oncomplete"/>
</flow>
此处在db update logger消息之前完成打印,这是由于异步行为,但是集合聚合器应该在所有进程完成后聚合。
答案 0 :(得分:0)
我会尽力回答你的问题。
1)根据我的说法,你提到的方法是最优的。将大量工作拆分成较小的子集,其中每个子集可以在不同的节点(可能)上处理,没有其他模式骡子可以帮助您。宾果好工作
2)当VM是请求/响应时,它在内部不使用队列,我发现这很痛苦,你可以找到故事here,因此与单向相比,它本身会减慢速度
这一点来自你的问题,我不完全明白,
但是当它是请求/响应时,它正在等待响应,何时 它等待响应是另一个进程启动或等待 完成早期的线程完成?
是否在新线程中执行下一个流(具有VM入站的流),此当前线程仍然被阻止,并且在得到响应之前不会继续。
为了结束您的情况,您坚持使用单向端点。