2014-12-05 51 views
0

我正在研究一个项目,我们需要解析大小> 2GB的文件并将数据加载到数据库中。我打算使用骆驼分割器将文件分解成50个不同的文件,然后使用Apache Camel处理每个文件。骆驼负载平衡和故障转移处理

我的问题是:

如果在处理文件之一,骆驼路线失败,那么我怎么能停止与文件名骆驼航线和审计这DB。可能会发生这样的情况:某些记录已处理并上载到数据库,并且特定记录无法在数据库中加载。所以我们需要在其他文件中记录这个特定的记录。

同样在处理时,如果由于网络故障DB操作而导致的支持被停止,那么在这种情况下文件处理是不完整的。那么如何处理这个不完整的文件处理场景,因为只有剩余的记录应该被再次处理。

+0

也许你最好应该使用批处理框架,比如Spring Batch(也可以集成到Camel中)。 – 2014-12-07 14:20:11

回答

1

由于您打算分割传入文件,我假设您的记录没有相互依赖关系。

而不是将大文件分割成多个文件,然后在尝试保留原始文件的某些上下文时处理它们,您可以使用分隔线逐行拆分大输入文件。分流器可以在流模式下使用,以不首先将大输入文件加载到内存中。然后将每一行放在SEDA /消息队列中。在接收端使用并发消费者进行并行处理。

文件组件用当前处理的文件名设置交换头。标题应该在分割和传输过程中保留。如果其中一个使用者失败,则消费路由的错误处理程序应该具有用于​​记录目的的源文件名的信息。尽管一封邮件可能失败了处理,但您的客户仍将继续处理邮件。所以没有必要弄清楚在哪里接受处理。

相关问题