文档

数据传递

更新时间:

流程(Flow)的多个状态(State)之间传递数据,和函数式编程语言类似。云工作流的状态类似于编程中的函数,它接受输入,并返回输出,输出保存在上下文中。本文介绍数据传递的基本概念和使用示例。

基本概念

云工作流的状态(State)之间可以进行组合嵌套,单个状态(State)运行过程中,其所处的环境中一些数据称为上下文。数据分类如下:

  • 静态数据:例如当前状态(State)名称、流程(Flow)所处地域和流程(Flow)名称等。

  • 动态数据:例如本次执行(Execution)的名称、输入;当前状态(State)的输入、输出和当前状态(State)的重试次数等。

数据访问

与流程和流程执行相关的数据,无论是静态数据,还是动态数据,您都通过系统提供的$Context表达式来访问相关的数据,Context中包含的数据内容如下:

{
    "Execution": {
        "Name": "String",
        "Input": {},
        "RoleArn": "String"
    },   
    "Current": {
        "Name": "String",
        "Input": {},
        "Output": {},
        "RetryCount": Number,
        "TaskToken": "String"
    }
}

Context可用于下面场景的数据构造:

  • 输入输出构造器。详细信息,请参见输入构造器输出构造器

  • 循环状态中的ItemsPath字段,例如$Context.Current.Input

  • 选择状态中的Condition字段,例如$Context.Current.Input.Size>=1024

为了方便用户使用,云工作流提供两个使用频率较高的快捷方式$Input $Output,您可以使用其快速访问当前节点的输入和输出。

  • $Input == $Context.Current.Input

  • $Output == $Context.Current.Output

数据传递

不同类型的状态(State)之间存在不同的输入输出传输逻辑,在没有输入输出构造器定义的情况下,不同状态(State)的输入输出逻辑如下。

  • 传递(Pass)/成功(Succeed)/失败(Fail)/等待(Wait)状态:接受输入,不做任何处理,直接输出。

  • 选择(Choice)状态:只具备输入能力,会将自身的输入传递到指向的状态。例如,平移传输到Default,或者到某分支判断条件是否成立,如果条件成立,则将输入传输到Next状态。

  • 并行(Parallel)状态:同一份输入,将会被深拷贝后同时传输给多个分支。输出将会被收集为Map[String]Any的形式,其中Key是每个Parallel分支的隐式名称 “Branch0~BranchN”,对应Value是每个Parallel分支实际的处理结果。

  • 循环(Map)状态:同一份输入,将会判断是否为数组或者Map[String]Any,特别强调的是,当Map的输入不是数组时,如果用户也没有通过ItemsPath设置指定要迭代的内容,系统会自动获取Map的Values作为迭代数组;系统将会对该数组进行迭代,每一个数组元素将会作为迭代处理器的输入;Map输出将会被收集为Map[String]Array的形式,其中Key是固定字符串“Items”,Value是由多个迭代结果组成的数组。

使用示例

Type: StateMachine
Name: my-wkfl
SpecVersion: v1
StartAt: Parallel1
States:
  - Type: Pass
    Name: Step1
    End: true
  - Type: Pass
    Name: Step2
	  InputConstructor:
	    FieldA: 123    
  - Type: Parallel
    Name: Step3
	  InputConstructor:
	    FieldA: 123
    Branches:
      - StartAt: Pass1
        States:
          - Type: Pass
            Name: Pass1
            End: true
      - StartAt: Pass2
        States:
          - Type: Pass
            Name: Pass2
            End: true
  - Type: Pass
    Name: Step4
    End: true

以上示例中,Parallel1使用输入构造器,构造了一个具备一个属性的JSON Object对象,其中FieldA为123。 该输入被默认传输给ParallelBranch #0与ParallelBranch #1。其所处上下文的Scope与Current数据发生变化。 同样在ParallelBranch #0中,输入被传输给Pass1,站在Pass1运行完成的角度,上下文数据可能如下所示。

Context{
	Current{
		Name = Pass1
		Input = { FieldA:123 }
		Output = { FieldA:123 }
		Error = null
		RetryCount = 0
	}
}

  • 本页导读 (1)
文档反馈