Spring批处理步骤的不同组合

时间:2015-07-14 10:56:16

标签: spring workflow spring-batch spring-integration

我正在开发一个项目,我将使用Spring Batch和Spring Integration来创建工作流系统。此工作流系统应该能够从队列中读取消息,这些消息实际上是来自客户端的作业请求,并且取决于我需要调用一些7-8系统的作业请求类型。

每个系统从某个位置读取输入文件(通常是集中存储系统,其中所有输入文件都由客户端提交存储),处理它然后将其传递给下一个系统,最终我应该能够给出响应客户端,如SUCCESS,如果它由所有系统成功处理,如果任何系统无法处理文件,则为FAILED,如果它失败,客户端应该能够从实际失败的步骤重新启动失败的作业。

我将添加每个系统作为Spring Batch中的一个步骤,然后使用Spring Integration我将模拟系统特定流程 - 例如FTP获取文件,发送JMS / SMAPI请求,接收JMS响应,FTP文件。等

我的问题是:

  1. 这是正确的方法吗?
  2. 如果“是”,使用Spring Batch和Spring Integration时的性能调整注意事项是什么?
  3. 由于所有系统都不会一直以相同的顺序被调用,如何使用Spring Batch作为潜在的Spring Batch作业编写所有可能的组合?

1 个答案:

答案 0 :(得分:0)

问题1: 一起使用Spring-Integration和Spring-Batch是一个好主意。

问题2: 使用Spring-Batch,您可以选择许多扩展选项,从而提高性能。您可以并行启动整个作业,可以并行执行步骤,可以并行执行块...基本问题是:

  1. 瓶颈在哪里
  2. 并行化在哪里提高性能
  3. 问题3: 基本上,Spring-Batch不是工作流程系统。它支持具有固定步骤顺序的作业。

    选项1:您可以在自己的工作中对每个系统进行建模(" jobSystemA"," jobSystemB")。有了它,您可以在"集成"中实现流程的逻辑。分层并以正确的顺序为每个系统启动一个新作业。

    选项2:如果您有可能的固定数量的流量,如

    Flow 1:
    Step A (System A)
    Step B (System B)
    Step C (System C)
    
    Flow 2:
    Step A (System A)
    Step C (System C)
    Step B (System B)
    

    您可以为每个可能的" Flow"定义一个Job。并将对特定系统作业的调用实现为" StepJob"它调用选项1中提到的特定" jobSystem" -job;

    之类的东西
    JobFlow1
      Step1 {JobStep call jobSystemA}
      Step2 {JobStep call jobSystemB}
      Step3 {JobStep call jobSystemC}
    
    JobFlow2
      Step1 {JobStep call jobSystemA}
      Step2 {JobStep call jobSystemC}
      Step3 {JobStep call jobSystemB}
    

    选项3:如果使用SpringBatch的流畅API以编程方式定义作业,则可以自由创建一个在运行时定义作业。