Composed Tasks DSL

Composed Task 可以通过三种方式运行:

1. Conditional Execution (条件执行)

使用(&&)表示条件执行。这使得序列中的每个任务只有在前一个任务成功完成时才会启动,如以下示例所示:

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(有向图)都以此符号结束。

2. Transitional Execution(转换执行)

DSL支持对 directed graph(有向图) 执行期间的 transitions(转换) 进行细粒度控制。通过提供基于前一个 Task 的退出状态的相同条件进行转换。Task 转换由->符号表示。

2.1. Basic Transition

Basic Transition 如下所示:

task create my-transition-composed-task \
--definition "foo 'FAILED' -> bar 'COMPLETED' -> baz"

在上面的示例中,将启动foo,如果它的退出状态为 FAILED,则bar任务将启动。如果退出状态为COMPLETED,则baz会启动。其他状态则会终止执行。

使用 Spring Cloud Data Flow Dashboard 创建一个相同的 basic transition 将如下所示:

组合任务基本过渡

上图是在 Spring Cloud Data Flow Dashboard 中创建的有向图的屏幕截图。请注意,有两种不同类型的连接器:

  • 虚线:表示从 Applications 到可能的目标应用程序之一的转换。

  • 实线:Applications 之间或与控制节点之间(开始和结束)的连接。

要创建连接器:

  1. When creating a transition, link the application to each possible destination by using the connector.

  2. Once complete, go to each connection and select it by clicking it.

  3. A bolt icon appears.

  4. Click that icon.

  5. Enter the exit status required for that connector.

  6. The solid line for that connector turns to a dashed line.

2.2. Transition 通配符使用

DSL 支持通配符,如下所示:

task create my-transition-composed-task \
--definition "foo 'FAILED' -> bar '*' -> baz"

在上面的示例中,将启动foo,如果它的退出状态为 FAILED,则bar任务将启动。如果退出状态为COMPLETED,则baz会启动。其他状态则会终止执行。

使用 Spring Cloud Data Flow Dashboard 创建"带通配符的Transition"将类似于以下图像:

使用通配符组合任务基本过渡

2.3. Transition 使用条件执行

Transition 只要不使用通配符,就可以使用条件执行,如以下示例所示:

task create my-transition-conditional-execution-task 
--definition "foo 'FAILED' -> bar 'UNKNOWN' -> baz && qux && quux"

在前面的示例中,foo将启动,如果它的退出状态为FAILED,则bar任务将启动。如果foo的退出状态为UNKNOWNbaz则会启动。除FAILEDUNKNOWN 之外的任何退出状态,将启动qux,并在完成后启动quux

使用 Spring Cloud Data Flow Dashboard 创建将类似于以下图像:

具有条件执行的组合任务转换

3. 拆分执行

拆分允许 Composed Task 中的多个任务并行运行。它通过使用尖括号(<>)来表示要并行运行的Task和Stream。由||符号分隔,如以下示例所示:

task create my-split-task --definition "<foo || bar || baz>"

上述前面的例子中启动并行任务foobarbaz

使用 Spring Cloud Data Flow Dashboard 创建类似于以下图像:

组合任务拆分

使用 Task DSL 配置,用户也可以连续执行多个拆分,如以下示例所示:

task create my-split-task --definition "<foo || bar || baz> && <qux || quux>"

在前面的例子,任务foobar以及baz被并行启动。一旦他们都完成,则任务quxquux继续并行开始执行。完成后,组合任务结束。但是,如果foobarbaz其中失败,则quxquux不会启动。

使用 Spring Cloud Data Flow Dashboard 创建将类似于以下图像:

组合任务拆分

请注意,在连接两个连续的拆分时,会插入一个SYNC控制节点。

拆分中使用的 Task 不应设置它们ExitMessage。设置ExitMessage仅用于 Basci Transitions

3.1. 包含条件执行的拆分

拆分也可以在尖括号内进行条件执行,如以下示例所示:

task create my-split-task --definition "<foo && bar || baz>"

在前面的示例中,我们看到foobaz是并行启动的。但是,bar直到foo成功完成后才会启动。

使用Spring Cloud Data Flow Dashboard创建类似于以下图像:

组合任务与条件执行分离

3.2. 为拆分建立正确的线程数

拆分中包含的每个子 Task 都需要一个线程才能执行。要正确设置的话,您需要根据图形计算出最大并行数量,这将是您需要使用的线程数。要设置线程计数,请使用split-thread-core-pool-size属性(默认为1)。因此,例如,定义如下:<AAA || BBB || CCC> && <DDD || EEE>将需要split-thread-core-pool-size为3.这是因为最大的split包含3个子任务。计数如果为2,将意味着AAABBB将并行运行但CCC将等到其中一个完成以后才能运行。然后,DDDEEE将继续并行运行。

Last updated

Was this helpful?