Composed Tasks DSL
Last updated
Last updated
Composed Task 可以通过三种方式运行:
使用(&&
)表示条件执行。这使得序列中的每个任务只有在前一个任务成功完成时才会启动,如以下示例所示:
task create my-composed-task --definition "task1 && task2"
当my-composed-task
Composed Task 启动时,它会先启动 task1
,如果成功完成,则task2
开始启动。如果task1
失败,task2
则不启动。
您还可以使用 Spring Cloud Data Flow Dashboard 创建条件执行,直接在拖放关联即可,如下图所示:
上图是使用 Spring Cloud Data Flow Dashboard 创建的 directed graph(有向图)。您可以看到图中包含条件执行的四个组件:
Start icon:所有directed graph(有向图)都从此符号开始。只有一个。
Task icon:表示directed graph(有向图)中的每个任务。
Solid line arrow(实线箭头):表示以下各项之间的流条件执行流程连接导向:
两个应用程序
启动控制节点和应用程序。
应用程序和结束控制节点。
End icon:所有directed graph(有向图)都以此符号结束。
DSL支持对 directed graph(有向图) 执行期间的 transitions(转换) 进行细粒度控制。通过提供基于前一个 Task 的退出状态的相同条件进行转换。Task 转换由->
符号表示。
Basic Transition 如下所示:
在上面的示例中,将启动foo
,如果它的退出状态为 FAILED
,则bar
任务将启动。如果退出状态为COMPLETED
,则baz
会启动。其他状态则会终止执行。
使用 Spring Cloud Data Flow Dashboard 创建一个相同的 basic transition
将如下所示:
上图是在 Spring Cloud Data Flow Dashboard 中创建的有向图的屏幕截图。请注意,有两种不同类型的连接器:
虚线:表示从 Applications 到可能的目标应用程序之一的转换。
实线:Applications 之间或与控制节点之间(开始和结束)的连接。
要创建连接器:
When creating a transition, link the application to each possible destination by using the connector.
Once complete, go to each connection and select it by clicking it.
A bolt icon appears.
Click that icon.
Enter the exit status required for that connector.
The solid line for that connector turns to a dashed line.
DSL 支持通配符,如下所示:
在上面的示例中,将启动foo
,如果它的退出状态为 FAILED
,则bar
任务将启动。如果退出状态为COMPLETED
,则baz
会启动。其他状态则会终止执行。
使用 Spring Cloud Data Flow Dashboard 创建"带通配符的Transition"将类似于以下图像:
Transition 只要不使用通配符,就可以使用条件执行,如以下示例所示:
在前面的示例中,foo
将启动,如果它的退出状态为FAILED
,则bar
任务将启动。如果foo
的退出状态为UNKNOWN
,baz
则会启动。除FAILED
和UNKNOWN
之外的任何退出状态,将启动qux
,并在完成后启动quux
。
使用 Spring Cloud Data Flow Dashboard 创建将类似于以下图像:
拆分允许 Composed Task 中的多个任务并行运行。它通过使用尖括号(<>
)来表示要并行运行的Task和Stream。由||
符号分隔,如以下示例所示:
task create my-split-task --definition "<foo || bar || baz>"
上述前面的例子中启动并行任务foo
,bar
和baz
。
使用 Spring Cloud Data Flow Dashboard 创建类似于以下图像:
使用 Task DSL 配置,用户也可以连续执行多个拆分,如以下示例所示:
task create my-split-task --definition "<foo || bar || baz> && <qux || quux>"
在前面的例子,任务foo
,bar
以及baz
被并行启动。一旦他们都完成,则任务qux
和quux
继续并行开始执行。完成后,组合任务结束。但是,如果foo
,bar
或baz
其中失败,则qux
和quux
不会启动。
使用 Spring Cloud Data Flow Dashboard 创建将类似于以下图像:
请注意,在连接两个连续的拆分时,会插入一个SYNC
控制节点。
拆分中使用的 Task 不应设置它们ExitMessage
。设置ExitMessage
仅用于 Basci Transitions。
拆分也可以在尖括号内进行条件执行,如以下示例所示:
task create my-split-task --definition "<foo && bar || baz>"
在前面的示例中,我们看到foo
和baz
是并行启动的。但是,bar
直到foo
成功完成后才会启动。
使用Spring Cloud Data Flow Dashboard创建类似于以下图像:
拆分中包含的每个子 Task 都需要一个线程才能执行。要正确设置的话,您需要根据图形计算出最大并行数量,这将是您需要使用的线程数。要设置线程计数,请使用split-thread-core-pool-size
属性(默认为1)。因此,例如,定义如下:<AAA || BBB || CCC> && <DDD || EEE>
将需要split-thread-core-pool-size
为3.这是因为最大的split包含3个子任务。计数如果为2,将意味着AAA
和BBB
将并行运行但CCC
将等到其中一个完成以后才能运行。然后,DDD
和EEE
将继续并行运行。