上云无忧 > 文档中心 > 百度智能云函数计算 CFC 流程定义语言介绍
函数计算CFC
百度智能云函数计算 CFC 流程定义语言介绍

文档简介:
流程定义语言是一种基于 YAML 的结构化语言,用于定义状态机、节点,包括负责执行的 operation 节点,决定下一跳的 switch 节点,停止执行并抛出错误的 fail 节点等各类节点,这些节点组合起来可以构建复杂的业务逻辑。
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

本文介绍了流程定义语言的基本知识和相关使用示例。

流程定义语言

流程定义语言是一种基于 YAML 的结构化语言,用于定义状态机、节点,包括负责执行的 operation 节点,决定下一跳的 switch 节点,停止执行并抛出错误的 fail 节点等各类节点,这些节点组合起来可以构建复杂的业务逻辑。

下面为一个简单示例,工作流通过输入数据中的 doExec 值判断是否进入 operation 节点执行 CFC 函数。

name: demo start: demoSwitch version: 1.0.0 timeoutSeconds: 100 description: "XFlow 
流程定义语言示例" states: - type: switch name: demoSwitch description: "whether to exec demo"
 conditions: - condition: .doExec == true next: invokeFunc - condition: .doExec == false next: stop 
- type: operation name: invokeFunc description: "invoke a function" resource: "brn:bce:cfc:su:
7c54a6e148:function:test:$LATEST" end: true - type: fail name: stop cause: "demo stopped"

字段 描述
name(必需) 流程定义语言的名字
start(必需) 用于指定流程的开始节点
states(必需) 节点定义的集合
version(可选) 版本信息,需要符合 semver 规则
timeoutSeconds(可选) 工作流的超时时间,单位为秒,最长为 172800,如果流程实际执行超过该时间则会被终止
description(可选) 描述信息

节点类型

节点是工作流的一个基本单元,所有的节点都定义在工作流的 states 参数里。每个节点都有自己的类型,在节点内部使用 type 参数来表示。目前工作流支持的节点类型如下:

  • 传递节点(pass)

    pass 节点可以直接生成常量数据,可用来在初始构建阶段提前占位,或通过修改输出调试工作流。

  • 选择节点(switch)

    根据节点的输入数据做条件判断,选择执行不同的分支节点。

  • 等待节点(wait)

    等待一段时间,不做其它操作。

  • 失败节点(fail)

    终止工作流的执行,并把结果执行标记为失败。

  • 成功节点(succeed)

    终止工作流的执行,并把结果执行标记为成功,类似编程语言中的 return 0;。

  • 任务节点(operation)

    负责调用 CFC 函数。

  • 并行节点(parallel)

    可在节点内定义多个子分支,并行执行。

  • 循环节点(foreach)

    循环处理数组数据,类似编程语言中的 for 循环。

节点拓扑关系

工作流开始运行时,首先进入 start 字段对应的节点。在一个节点内部, 定义 next: invoke 表示节点的下一跳指向为 invoke 节点,定义 end: true 表示该节点为结束节点,没有下一跳。在节点执行完成后,XFlow 就会根据这些定义来决定接下来的动作。

关于工作流的开始、结束、下一跳指向,在定义时需要遵循如下原则:

  • 节点需要明确定义下一跳指向或结束

    节点必须定义且只能定义 next 或 end 其中的一个,流程的最后一个节点需要定义 end: true。

    fail/succeed 节点是一种特殊情况,它们表示工作流的执行已结束,已经内含了 end 逻辑,因此不允许再指定 next 和 end 参数。

  • 只能有一个开始节点,可以有多个结束节点

    一个工作流内可能会存在多个分支,比如 parallel 节点定义了两个同时执行的分支节点,每个分支的最后一个节点,都需要表明自己为结束节点,即定义 end: true。

  • 节点有层级和分支之分,不同层级、分支的节点是隔离的

    以 parallel 节点为例,parallel 节点内可定义多个节点分支,分支内的节点与 parallel 节点是父子关系,并不在一个层级,因此分支内的节点不可以用 next 指向上层级的节点,同样上层节点的 next 也不可以指向子层级。另外,不同分支的节点之间也是隔离的。

    在下面示例中,s1、s2 节点在 hello 节点内部,因此它们的 next 不可以设置为外层的 world 节点。s3 节点与 s1、s2 虽然在一个节点,但它们属于不同分支,因此 s3 也不可以指向 s1、s2。

    name: parallel-demo start: hello states: - type: parallel name: hello branches: - start: s1 states: 
  • - type: pass name: s1 next: s2 - type: pass name: s2 end: true - start: s3 states: - type: wait name:
  •  s3 seconds: 3 end: true next: world - type: succeed name: world

示例图如下所示:

相似文档
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部