Spring Cloud数据流:任务的程序编排



背景

我有Spring Cloud Data Flow Server作为Pod在Kubernetes中运行。我可以从SCDF服务器UI面板启动任务。我希望开发一个更复杂的、真实的任务管道用例。

我不想使用SCDFUI面板,而是想从标准Java应用程序中启动一个任务的顺序列表。考虑以下任务管道:

任务1:从数据库中读取作为任务参数输入接收的唯一id的数据,并执行富集。丰富的记录被写回数据库。一个任务实例的执行负责处理一个唯一的id。

任务2:读取步骤1为作为任务参数输入接收的唯一id编写的丰富数据,并生成报告。一个任务实例的执行负责为一个唯一id生成报告。

从上面的解释中应该清楚,任务1和任务2是连续的步骤。假设输入数据库包含50k个唯一的id。我想开发一个协调器Java程序,该程序将启动任务1,限制为40。(即,对于任务1,在任何给定时间只能运行40个吊舱。任何为任务1启动更多pod的请求都应该等待(。一旦通过任务1实例处理了所有50k个唯一ID,就只能启动任务2 pod。

到目前为止我发现了什么

通过查看文档,我发现了一个名为CompositeTaskRunner的东西。但是,示例显示了在shell/cmd窗口上触发的命令。我想做一些类似的事情,但我不想打开一个数据流shell程序,而是想将参数传递给一个可以在内部启动任务的Java程序。这使我能够轻松地将我的应用程序与知道如何与Java代码集成的遗留代码集成(通过按需启动Java程序来启动一组任务并等待它们完成,或者通过调用Rest API(。

问题

  1. 如何使用Java而不是数据流外壳通过Spring Cloud Data Flow按需编程启动任务?(有没有Rest-API可以这样做,或者一个简单的Java程序也可以在独立的服务器上运行(
  2. 如何以编程方式构建一个顺序管道,该管道对每个任务可以启动的pod数量有上限,并具有相关性,使得任务只能在前一个任务完成处理所有输入后启动

请查看Java DSL对Tasks的支持。

您将能够使用这个流畅风格的API编写具有顺序/并行执行的任务编排。[示例:.definition("a: timestamp && b:timestamp")]

通过将其定义为Java代码,您将能够构建、启动或安排这些有向图的启动。我们看到许多客户采用这种方法进行E2E验收测试和部署自动化。

[添加]

此外,您还可以为连续部署扩展编程任务定义。

最新更新