Architecture Apache Camel是否适合与专有作业处理应用程序集成?

Architecture Apache Camel是否适合与专有作业处理应用程序集成?,architecture,apache-camel,message-queue,jobs,eai,Architecture,Apache Camel,Message Queue,Jobs,Eai,在当前项目中,我们需要对从系统导出的数据进行一些相当复杂的计算。计算由第三方软件处理(这对我们来说基本上是一个黑匣子)。我们将此软件作为Linux或Windows二进制文件,并且知道如何使用命令行中的数据执行它 在一个CPU内核上处理单个数据集大约需要200小时。但是,我们可以将数据集拆分为较小的数据集(结构等效)并并行运行计算。稍后,我们可以轻松地汇总结果。 我们的目标是能够在10小时内处理每个数据集 我们的客户拥有专有的作业处理应用程序。该界面基于文件系统:我们将作业的EXE文件(是的,它支

在当前项目中,我们需要对从系统导出的数据进行一些相当复杂的计算。计算由第三方软件处理(这对我们来说基本上是一个黑匣子)。我们将此软件作为Linux或Windows二进制文件,并且知道如何使用命令行中的数据执行它

在一个CPU内核上处理单个数据集大约需要200小时。但是,我们可以将数据集拆分为较小的数据集(结构等效)并并行运行计算。稍后,我们可以轻松地汇总结果。 我们的目标是能够在10小时内处理每个数据集

我们的客户拥有专有的作业处理应用程序。该界面基于文件系统:我们将作业的EXE文件(是的,它支持Windows)和配置INI文件复制到传入文件夹,作业处理应用程序在其中一个节点上执行此作业(处理错误、故障切换等),最后将结果复制到传出文件夹。这个专有的作业处理系统有数百个CPU核,因此显然有足够的能力在10小时内处理我们的数据集。甚至不到30分钟

现在,问题是,到目前为止,我们的应用程序是基于J2EE的,或多或少是标准的JBoss应用程序。我们需要:

  • 与专有队列(如作业处理系统)和
  • 以可靠的方式拆分/聚合我们的数据集
对我来说,我们要做的事情中的许多部分看起来非常类似于拆分器和聚合器。因此,我在想,是否适合实施:

  • 我们将以消息的形式构造作业(EXE+INI+dataset)
  • 拆分器通过将数据集拆分为几个较小的数据集,将大型作业消息拆分为较小的作业消息
  • 我们可能需要实现自己的消息传递通道,以便将消息写入专有作业处理系统的传入目录或从传出目录读取消息
  • 我们需要一个聚合器将作业部分的结果聚合为一个作业的单个结果
但是,我还没有使用ApacheCamel的经验,所以我决定就其适用性征求意见

考虑到上面描述的问题,您认为ApacheCamel适合该任务吗


结束语:我不是在寻找外部资源或工具/库建议。如果我使用ApacheCamel的方法正确的话,请确认一下(或相反)。

您有一个相当复杂的用例。让我用一种简单的方式重新表述一下你想做什么,并提供我的想法。如果你看到我错过了什么,请给我留言,我会修改我的帖子

基于JBoss的J2EE应用程序,它有一个大数据集,需要将其分解成更小的部分,然后转换为自定义格式。然后,该格式将被写入磁盘,并由另一个应用程序处理,该应用程序将在磁盘上的输出文件夹中创建新的数据结果。然后,您希望获取此输出并聚合结果

我想说apachecamel可以做到这一点,但您必须花时间根据您的需要适当地调整系统,并在组件上设置一些自定义配置。我想象这个过程看起来像:

from("my initial data source")
    .split().method(CustomBean.class, "customSplitMethod")
        //You might want some sort of round robin pattern to 
       //distribute between the different directories 
        .to("file://customProgramInputDirectory");

from("file://customProgramOutputDirectory")
    .aggregate(constant(true), new MyCustomAggregationStratedgy())
    .to("output of your data source");

由于您说您将与“专有队列式作业处理系统”集成,我可能误解了其他程序的输入和输出是文件目录,如果它是基于队列的系统并且支持jms,那么您可以使用一个通用模板,如果不总是可以创建自定义camel组件,那么您的模式将从“file://”更改为“MyCustomEndpoint://”

答案是否定的-camel不是最好的框架,即使它可以拉伸以模仿您所描述的内容

ApacheCamel在传入的unity of work标识为
Exchange
时执行一些拆分,当然,它可以是一个文件(使用Camel文件组件)。但是,在分割时,每个“块”都会被发送到专用的
处理器

问题在于,区块本身就是一个
交换
,应该放在内存中(以便以后能够并行执行任务)。在您的情况下,我假设部分数据仍然太大,无法在内存中处理。如果没有,Camel将满足您的需求,甚至执行与您描述的系统集成所需的所有轮询


您要求不要提出任何建议,但如果我是您,我会尝试使用Spring Batch。

我认为Apache Camel适合您的需要,因为它是迄今为止我发现的最好的集成框架之一

我目前的项目涉及ECM,必须处理数量巨大的文档,可能达到每天100万份

作为输入,我们有表示一组文档(或大量文档)的XML文件,以及存储在NAS上的真实文件的链接

首先,我们必须将所有这些XML文件转换为专有XML格式,该格式适用于我们的ECM系统(我们的blackbox)使用的专有文档导入器,并将它们分割成更小的部分,以便利用多个导入队列

然后,我们必须监视导入器队列并正确地分配它们,以平衡队列负载,在该操作之后,我们必须找出从导入器生成的输出专有格式XML文件读取的操作结果

在这个过程的每一个步骤之间都有一个ActiveMQ队列(带有数据库持久性),以便使每一个阶段都保持异步 可以按比例增加该特定队列上的并发使用者数量

此外,我们的微服务是由ESB管理的庞大而冗长的工作流的一部分,因此我们从ESB获取输入消息