我的批处理用例看起来像一个常见的模式,但我不确定Spring Batch是否按照我的预期工作。非常感谢您的澄清和建议。
可以有许多基于Spring批处理的应用程序负责任务处理。处理请求来自REST资源,因此使用 ThreadPoolTaskExecutor (如所讨论的here)。 JobRegistry基于JDBC,所有实例共享完全相同的配置。
我想要实现的是每个节点都可以处理已提交的任何作业的情况。这样我可以随着负载的增长扩展我的解决方案 - 我只需添加新的实例来处理排队的请求。解决方案也很强大:如果任何节点死亡,其任务将由不同的节点自动处理。
但显然这与Spring Batch无法正常工作。每个节点似乎都处理在该节点上处理的任务。即使节点A在队列中有1000个项目而节点B什么都不做,它也不会占用A的任何负载。
那是因为SimpleJobLauncher的工作原理 - 在创建相应的JobExecution之后,它只是将任务排队到taskExecutor中:
JobExecution jobExecution = this.jobRepository.createJobExecution(job.getName(), jobParameters);
this.taskExecutor.execute(new Runnable(job, jobParameters, jobExecution) ....
我认为我不需要分工 - 它似乎不是用例。那么如何使用Spring Batch实现稳健性和可伸缩性呢?
由于 ˚F