从流应用程序启动由 DSL 构建的组合任务

Launching composed task built by DSL from stream application

我见过的每个示例(task-launcher sink 和 triggertask source )都显示了如何启动由 uri 属性定义的任务。 我的任务定义如下所示:

sampleTask  <t2: timestamp || t1: timestamp> 
sampleTask-t1   timestamp   
sampleTask-t2   timestamp   
sampleTaskRunner    composed-task-runner --graph=sampleTask

我的问题是如何从流应用程序启动组合任务运行器(sampleTaskRunner,由 DSL 定义)。

谢谢

更新

我最终得到了以下使用 SCDF REST API 触发任务的解决方案:

composedTask 定义:

<timestamp || mySampleTask>

流定义:

http | httpclient | log

部署属性:

app.http.port=81
app.httpclient.body=name=composedTask&arguments=--increment-instance-enabled=true
app.httpclient.http-method=POST
app.httpclient.url=http://localhost:9393/tasks/executions
app.httpclient.headers-expression={'Content-Type':'application/x-www-form-urlencoded'}

虽然实现 http sink 组件很容易,但如果流应用程序启动器提供一个开箱即用的组件,那就太好了。

我担心的另一个问题是在分布式环境中部署时发现 SCDF REST URL。

以下是 SCDF 研发团队成员之一 (Glenn Renfro) 的简要介绍。

stream create foozer --definition "trigger --fixed-delay=5 | tasklaunchrequest-transform --uri=maven://org.springframework.cloud.task.app:composedtaskrunner-task:1.1.0.BUILD-SNAPSHOT --command-line-arguments='--graph=sampleTask-t1||sampleTask-t2 --increment-instance-enabled=true --spring.datasource.url=jdbc:mariadb://localhost:3306/test --spring.datasource.username=root --spring.datasource.password=password --spring.datasource.driverClassName=org.mariadb.jdbc.Driver' | task-launcher-local" --deploy

foozer 流定义中,

1) "trigger" source恰好每5s触发一个upstream事件

2) "tasklaunchrequest-transform" 处理器接受一些参数;更具体地说,它使用 "composedtaskrunner-task:1.1.0.BUILD-SNAPSHOT" 启动组合任务图(即 sampleTask-t1||sampleTask-t2

3) 注意--increment-instance-enabled。这对 CTR 应用程序来说是 recently added,这提供了以循环节奏重新启动组合任务的能力

4) 由于 CTR 和 SCDF 必须 share the same database,我们还将数据源属性作为命令行参数传递。 (SCDF 服务器已使用相同的数据源凭据启动)

希望对您有所帮助。

最后,我们将通过以下方式向参考指南添加示例:spring-cloud/spring-cloud-dataflow#1780