gpt4 book ai didi

java - 使用 Spring Batch 水平扩展外部流程执行

转载 作者:行者123 更新时间:2023-11-30 03:21:13 24 4
gpt4 key购买 nike

我们工作的步骤之一涉及运行外部进程(在本例中为 R)来对文件系统中的大文件进行一些处理。然后,外部进程将输出文件,然后将这些文件反馈到 Spring Batch 系统中。

每个任务的外部进程可能需要几分钟才能完成。我们将有效地为每个要处理的文件启动外部进程,因此在整个作业的生命周期中很容易执行数十或数百次此类执行。我们希望水平(和垂直)扩展此执行。

使用 Spring Batch,远程分块或远程分区是否是此步骤的可行解决方案?系统实际上只需要说“对于每个输入文件,启动 R 脚本来处理它”,因此实际上不涉及任何面向项目或 block 的处理。

事实证明,远程分块/分区很难以合理的方式实现这一点,而又不会显得矫枉过正。我曾考虑过让这个任务“带外”运行。例如,在处理器中,我会将每个“外部任务”放在 JMS 队列上,让某些东西将其拉下来并处理它,然后等待它完成的响应。这看起来比使用远程分块/分区要容易得多。

除 Spring Batch 之外的其他替代解决方案也受到欢迎,但我现在想重点关注将此解决方案与 Spring Batch 集成。

最佳答案

您所描述的正是分区的作用。即使您的“带外”选项仍然属于分区的作用。

让我们来看看我对这份工作的期望。

工作和大师步骤

正如您所指出的,这项工作是单步工作。我的设想是单个步骤是一个分区步骤。对于分区步骤,您需要配置的两个主要部分是 Partitioner(知道如何划分工作的组件)和 PartitionHandler(知道如何划分工作的组件)如何将工作发送给 worker )。对于 Partitioner,我希望使用 MultiResourcePartitioner会工作。 Spring Batch 提供的此 Partitioner 实现根据其配置的定义为每个文件创建一个分区。

PartitionHandler 中您可以选择是要在本地(通过 TaskExecutorPartitionHandler )还是远程(通过 MessageChannelPartitionHandler )执行从属程序。 PartitionHandler 还负责将执行从属程序的结果聚合到单个状态中,以便可以评估步骤的结果。

从步

对于从属步骤,有两部分。第一个是步骤本身的配置。这与您排队运行该步骤没有什么不同。在此示例中,我希望您使用 SystemCommandTasklet运行您的 R 进程(除非您在 JVM 上运行它)。

该步骤的启动方式取决于远程分区与本地分区,但也很简单。

郑重声明,我不久前做了一次演讲,演示了 YouTube 上提供的远程分区:https://www.youtube.com/watch?v=CYTj5YT7CZU该演示的代码也可以在 Github 上找到:https://github.com/mminella/Spring-Batch-Talk-2.0

关于java - 使用 Spring Batch 水平扩展外部流程执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31296973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com