日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

數(shù)據(jù)傳遞

流程(Flow)的多個(gè)狀態(tài)(State)之間傳遞數(shù)據(jù),和函數(shù)式編程語(yǔ)言類似。云工作流的狀態(tài)類似于編程中的函數(shù),它接受輸入,并返回輸出,輸出保存在上下文中。本文介紹數(shù)據(jù)傳遞的基本概念和使用示例。

基本概念

云工作流的狀態(tài)(State)之間可以進(jìn)行組合嵌套,單個(gè)狀態(tài)(State)運(yùn)行過(guò)程中,其所處的環(huán)境中一些數(shù)據(jù)稱為上下文。數(shù)據(jù)分類如下:

  • 流程數(shù)據(jù):流程(Flow)的名稱、地域;組成流程的各個(gè)狀態(tài)(State)名稱;流程執(zhí)行過(guò)程中依賴的訪問(wèn)角色等信息;

  • 執(zhí)行數(shù)據(jù):執(zhí)行(Execution)的名稱、執(zhí)行輸入;執(zhí)行過(guò)程中當(dāng)前狀態(tài)(State)的輸入、輸出;執(zhí)行中生成的用于回調(diào)的Token信息,以及執(zhí)行過(guò)程中狀態(tài)(State)發(fā)生錯(cuò)誤之后,產(chǎn)生的錯(cuò)誤信息,針對(duì)錯(cuò)誤處理的重試次數(shù)等信息。

數(shù)據(jù)訪問(wèn)

與流程和流程執(zhí)行相關(guān)的數(shù)據(jù),無(wú)論是靜態(tài)數(shù)據(jù),還是動(dòng)態(tài)數(shù)據(jù),您都通過(guò)系統(tǒng)提供的$Context表達(dá)式來(lái)訪問(wèn)相關(guān)的數(shù)據(jù),Context中包含的數(shù)據(jù)內(nèi)容如下:

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

Context 可用于下面場(chǎng)景的數(shù)據(jù)構(gòu)造:

  • 輸入輸出構(gòu)造器。詳細(xì)信息,請(qǐng)參見(jiàn)輸入和輸出狀態(tài)輸出構(gòu)造器。

  • 循環(huán)狀態(tài)中的ItemsPath字段,例如$Context.Current.Input。

  • 選擇狀態(tài)中的Condition字段,例如$Context.Current.Input.Size>=1024

  • 錯(cuò)誤處理信息判斷,例如$Context.Current.Error.Code$Context.Current.Error.Detail

  • 任務(wù)回調(diào)Token 傳遞,例如$Context.Current.TaskToken。

為了方便用戶使用,云工作流提供兩個(gè)使用頻率較高的快捷方式$Input $Output,您可以使用其快速訪問(wèn)當(dāng)前節(jié)點(diǎn)的輸入和輸出。

  • $Input 等價(jià)于 $Context.Current.Input

  • $Output 等價(jià)于 $Context.Current.Output

數(shù)據(jù)傳遞

不同類型的狀態(tài)(State)之間存在不同的輸入輸出傳輸邏輯,在沒(méi)有輸入輸出構(gòu)造器定義的情況下,不同狀態(tài)(State)的輸入輸出邏輯如下。

  • 傳遞(Pass)/成功(Succeed)/失敗(Fail)/等待(Wait)狀態(tài):接受輸入,不做任何處理,直接輸出。

  • 選擇(Choice)狀態(tài):只具備輸入能力,會(huì)將自身的輸入傳遞到指向的狀態(tài)。例如,平移傳輸?shù)紻efault,或者到某分支判斷條件是否成立,如果條件成立,則將輸入傳輸?shù)絅ext狀態(tài)。

  • 并行(Parallel)狀態(tài):同一份輸入,將會(huì)被深拷貝后同時(shí)傳輸給多個(gè)分支。輸出將會(huì)被收集為Map[String]Any的形式,其中Key是每個(gè)Parallel分支的隱式名稱 “Branch0~BranchN”,對(duì)應(yīng)Value是每個(gè)Parallel分支實(shí)際的處理結(jié)果。

  • 迭代(Map)狀態(tài):同一份輸入,將會(huì)判斷是否為數(shù)組或者M(jìn)ap[String]Any,特別強(qiáng)調(diào)的是,當(dāng)Map的輸入不是數(shù)組時(shí),如果用戶也沒(méi)有通過(guò)ItemsPath設(shè)置指定要迭代的內(nèi)容,系統(tǒng)會(huì)自動(dòng)獲取Map的Values作為迭代數(shù)組;系統(tǒng)將會(huì)對(duì)該數(shù)組進(jìn)行迭代,每一個(gè)數(shù)組元素將會(huì)作為迭代處理器的輸入;Map輸出將會(huì)被收集為Map[String]Array的形式,其中Key是固定字符串“Items”,Value是由多個(gè)迭代結(jié)果組成的數(shù)組。

  • 任務(wù)(Task)狀態(tài):接受來(lái)自前一個(gè)狀態(tài)或外部數(shù)據(jù)源的輸入數(shù)據(jù),在任務(wù)腳本中執(zhí)行具體業(yè)務(wù)邏輯,使用$Context表達(dá)式訪問(wèn)和操作數(shù)據(jù),再將任務(wù)執(zhí)行的結(jié)果作為輸出數(shù)據(jù)傳遞給后續(xù)狀態(tài)或存儲(chǔ)在外部系統(tǒng)中。

使用示例

Type: StateMachine
Name: DataTransferExample
SpecVersion: v1
StartAt: Step1
States:
  - Type: Pass
    Name: Step1
    Next: Step2
  - Type: Parallel
    Name: Step2
    InputConstructor:
      FieldA: 123
    Branches:
      - StartAt: Pass1
        States:
          - Type: Pass
            Name: Pass1
            End: true
      - StartAt: Pass2
        States:
          - Type: Pass
            Name: Pass2
            End: true
    Next: Step3
  - Type: Pass
    Name: Step3
    End: true

以上示例中,在 Parallel 類型的 Step2 狀態(tài)中使用輸入構(gòu)造器,構(gòu)造了包含一個(gè)屬性的 JSONObject,其中屬性FieldA為123。 該輸入被默認(rèn)傳輸給ParallelBranch #0與ParallelBranch #1。以其中一個(gè)Branch為例,在ParallelBranch #0中,輸入被傳輸給Pass1,站在Pass1運(yùn)行完成的角度,上下文數(shù)據(jù)如下所示。

{
  "Execution": {
    "Name": "xxxx-xxxx-xxxx-xxxx",
    "Input": {},
    "RoleArn": "xxxx"
  },
  "Current": {
    "Name": "Pass1",
    "Input": {
      "FieldA": 123
    },
    "Output": {
      "FieldA": 123
    },
    "Error": null,
    "RetryCount": 0
  }
}