本文為您提供工作流中狀態類型的整體介紹,包括暫停(Sleep)、操作(Operation)、傳遞(Noop)、條件分支(Switch)、迭代(Foreach)和并行(Parallel)狀態,幫助您理解其功能和應用,助力復雜流程的構建與管理。
整體介紹
工作流狀態是流程定義的核心組件,用于實現特定的邏輯、控制和執行操作。以下六種狀態類型各具特色,滿足從延遲執行、API調用到條件判斷、并行處理的多樣化需求:
暫停(Sleep)狀態:在工作流中引入時間延遲,支持相對時長或絕對時間點暫停,適用于定時任務或等待場景。
操作(Operation)狀態:執行具體功能,如調用云服務API、函數或第三方HTTP請求,是工作流中任務執行的基礎。
傳遞(Noop)狀態:作為占位符或數據轉換工具,傳遞輸入數據,常用于流程設計初期的調試和規劃。
條件分支(Switch)狀態:根據條件表達式選擇執行路徑,類似編程中的switch-case,靈活控制流程方向。
迭代(Foreach)狀態:并行遍歷輸入數組,對每個元素執行處理器邏輯,類似foreach循環,高效處理批量數據。
并行(Parallel)狀態:并行執行多個分支,合并各分支結果,適用于需要同時處理多項任務的場景。
這些狀態通過組合使用,支持動態、健壯且高效的工作流設計。
狀態介紹
暫停(Sleep)狀態
本節將為您詳細介紹暫停狀態(Sleep)的功能及其應用示例,幫助您在工作流中實現流程的暫停與延續。
基本概念
暫停狀態(Sleep)用于在工作流中暫停執行一段指定時間,之后繼續后續流程。
您可以設置一個相對時長(如暫停10秒)或一個絕對時間點(如某年8月11日08:00)來控制流程的延遲,適用于需要定時等待的場景。
狀態屬性
暫停狀態包含以下關鍵屬性,用于定義其行為和延遲時長:
| 字段 | 類型 | 是否必選 | 描述 | 示例值 |
|---|---|---|---|---|
| name | string | 是 | 狀態的名稱,用于唯一標識。 | sleep-state |
| type | string | 是 | 狀態類型,固定為“Sleep”。 | Sleep |
| duration | string | 否 | sleep相對事件,和until互斥,ms/s/m/h | 10s |
| until | string | 否 | sleep絕對時間,遵循RFC3339格式,和duration互斥 | 2024-11-22T17:40:40+08:00 |
| end | bool | 否 | 表示該狀態是否為當前分支的終點。 | true |
| stateDataFilter | StateDataFilter | 否 | 輸入/輸出構造器,參考流程定義介紹中StateDataFilter字段說明 | |
| transition | Transition | 否 | 參考流程定義介紹中Transition字段說明 |
注意事項:
duration和until必須且只能選擇一個進行配置。
使用示例1
以下示例展示如何定義一個暫停狀態,暫停流程10秒:
specVersion: '0.8'
version: '1.0'
name: test
start: SleepDuration
states:
- name: SleepDuration
type: Sleep
duration: 10s
transition:
nextState: Final
示例說明
name: 狀態類型為
Sleep,表示暫停狀態。type: 狀態命名為
SleepDuration,便于識別。duration: 設置暫停時長為10秒。
transition: sleep完成后跳轉至Final狀態。
使用示例2
以下示例展示如何定義一個暫停狀態,在指定時間點繼續執行:
specVersion: '0.8'
version: '1.0'
name: test
start: SleepUntil
states:
- name: SleepUntil
type: Sleep
until: 2024-11-22T17:40:40+08:00
transition:
nextState: Final
示例說明
type: 狀態類型為
Sleep,表示暫停狀態。name: 狀態命名為
SleepUntil,便于識別。until: 在2024-11-22日17:40繼續執行。
transition: sleep完成后跳轉至Final狀態。
操作(Operation)狀態
本節為您介紹操作狀態(Operation)的核心概念及實用示例,指導您如何通過操作狀態調用集成服務API,構建復雜的工作流程。
基本概念
操作狀態(Operation)用于在工作流中調用集成服務API以執行特定功能。
您可以通過操作狀態發起函數調用、請求天翼云服務API,或通過HTTP/HTTPS等協議訪問第三方服務。在流程定義中,將狀態類型指定為“Operation”即可標記為操作狀態。
狀態屬性
操作狀態包含以下關鍵屬性,用于定義其行為和調用方式:
| 字段 | 類型 | 是否必選 | 描述 | 示例值 |
|---|---|---|---|---|
| name | string | 是 | 狀態的名稱,用于唯一標識。 | op_example |
| type | string | 是 | 狀態類型,固定為“Operation”。 | Operation |
| actions | []Action | 是 | 參考Action屬性,當前只支持單一Action | |
| end | bool | 否 | 表示該狀態是否為當前分支的終點。 | true |
| stateDataFilter | StateDataFilter | 否 | 輸入/輸出構造器,參考流程定義介紹中StateDataFilter字段說明 | |
| transition | Transition | 否 | 參考流程定義介紹中Transition字段說明 |
Action屬性
定義操作狀態的具體行為,支持調用函數或服務API:
| 字段 | 類型 | 是否必選 | 描述 | 示例值 |
|---|---|---|---|---|
| functionRef | FunctionRef | 是 | 引用具體的函數或操作,詳見FunctionRef定義。 | |
| retryRef | RetryRef | 是 | 引用具體的重試策略,參考錯誤處理章節。 | |
| catchRef | CatchRef | 是 | 引用具體的錯誤捕獲策略,參考錯誤處理章節。 | |
| actionExecuteMode | string | 否 | 執行模式,詳細說明請參考服務集成模式,僅標準工作流下可配置。默認為RequestComplete。 |
|
FunctionRef屬性
定義操作狀態的具體行為,支持調用函數或服務API:
| 字段 | 類型 | 是否必選 | 描述 | 示例值 |
|---|---|---|---|---|
| type | string | 是 | 類型 | CF:invokeFunction |
| arguments | map[string]any | 否 | 調用參數,具體內容依動作類型而定。 |
調用示例
示例1:調用函數計算
通過操作狀態調用函數計算服務,Parameters字段定義調用參數,具體規范參考配置參數文檔。支持優化集成調用或直接使用天翼云OpenAPI。
specVersion: '0.8'
version: '1.0'
name: test
start: InvokeFunction
states:
- name: InvokeFunction
type: Operation
actions:
- functionRef:
type: CF:invokeFunction
arguments:
functionName: test-function
qualifier: LATEST
region: b342b77ef26b11ecb0ac0242ac110002
transition:
nextState: Final
示例2:調用ctyun api列出pg數據庫
specVersion: '0.8'
version: '1.0'
name: test
start: listPgDataBases
states:
- name: listPgDataBases
type: Operation
metadata: {}
stateDataFilter: {}
actions:
- retryRef: []
catchRef: []
functionRef:
type: ctapi
arguments:
statusType: pgsql:listPgDataBases
ctapictrn: pgsql:hbbd1-a:listPgDataBases:3776
capacityId: 3776
method: GET
path: /v1/database/list
headers:
regionId: bb9fdb42056f11eda1610242ac110002
uriParameters: {}
queryParameters:
prodInstId: ''
body: {}
actionExecuteMode: RequestComplete
end: true
補充說明
應用場景:操作狀態適用于調用云服務API、函數計算或第三方服務,助力復雜流程的自動化。
錯誤處理:通過Retry和Catch配置,可實現重試和異常捕獲,提升流程健壯性。
傳遞(Noop)狀態
本節將為您詳細介紹傳遞狀態(Noop)的功能及其應用示例,幫助您了解其在工作流設計中的作用。
基本概念
傳遞狀態是一種靈活的工作流組件,可作為占位符或數據轉換工具使用。它能夠將輸入數據調整為所需的輸出格式,特別適合在流程設計的初期使用。
例如,當您尚未定義具體的集成任務狀態時,可以通過控制狀態和傳遞狀態來搭建和驗證流程邏輯。待邏輯完善后,您可以將傳遞狀態逐步替換為實際的任務狀態。
Noop實際是一種特殊的Operation,noop狀態與operation狀態結構一致,但部分參數不可用。
狀態屬性
操作狀態包含以下關鍵屬性,用于定義其行為和調用方式:
| 字段 | 類型 | 是否必選 | 描述 | 示例值 |
|---|---|---|---|---|
| name | string | 是 | 狀態的名稱,用于唯一標識。 | op_example |
| type | string | 是 | 狀態類型,固定為“Operation”。 | Operation |
| actions | []Action | 是 | 參考Action屬性,當前只支持單一Action | |
| end | bool | 否 | 表示該狀態是否為當前分支的終點。 | true |
| stateDataFilter | StateDataFilter | 否 | 輸入/輸出構造器,參考流程定義介紹中StateDataFilter字段說明 | |
| transition | Transition | 否 | 參考流程定義介紹中Transition字段說明 |
Action屬性
定義操作狀態的具體行為,支持調用函數或服務API:
| 字段 | 類型 | 是否必選 | 描述 | 示例值 |
|---|---|---|---|---|
| functionRef | FunctionRef | 是 | 引用具體的函數或操作,詳見FunctionRef定義。 |
FunctionRef屬性
定義操作狀態的具體行為,支持調用函數或服務API:
| 字段 | 類型 | 是否必選 | 描述 | 示例值 |
|---|---|---|---|---|
| type | string | 是 | 操作類型,固定為“Noop” | Noop |
使用示例
以下是一個傳遞狀態的定義示例,該狀態在執行后輸出一個包含字段 FieldA 的 JSON 對象,值為 123:
specVersion: '0.8'
version: '1.0'
name: test
start: noop1
states:
- name: noop1
type: Operation
actions:
- functionRef:
type: Noop
end: true
stateDataFilter:
input: '{ $Context.Input.data }'
output: '{ $.fieldA }'
示例解析:
type:指定狀態類型為
Noop,表明這是一個傳遞狀態。name:狀態命名為
noop1,便于在流程中識別。End:設置為
true,表示該狀態是工作流的終點,無需指定后續狀態。stateDataFilter:定義輸入輸出構造器。
失敗(Fail)狀態
本節將為您詳細介紹傳遞失敗(Fail)的功能及其應用示例,幫助您了解其在工作流設計中的作用。
基本概念
Fail狀態會返回失敗結果,可用于提前結束工作流執行并將執行結果置為失敗。
Fail實際是一種特殊的Operation,noop狀態與operation狀態結構一致,但部分參數不可用。
狀態屬性
操作狀態包含以下關鍵屬性,用于定義其行為和調用方式:
| 字段 | 類型 | 是否必選 | 描述 | 示例值 |
|---|---|---|---|---|
| name | string | 是 | 狀態的名稱,用于唯一標識。 | op_example |
| type | string | 是 | 狀態類型,固定為“Operation”。 | Operation |
| actions | []Action | 是 | 參考Action屬性,當前只支持單一Action | |
| end | bool | 否 | 表示該狀態是否為當前分支的終點,固定為true | true |
Action屬性
定義操作狀態的具體行為,支持調用函數或服務API:
| 字段 | 類型 | 是否必選 | 描述 | 示例值 |
|---|---|---|---|---|
| functionRef | FunctionRef | 是 | 引用具體的函數或操作,詳見FunctionRef定義。 |
FunctionRef屬性
定義操作狀態的具體行為,支持調用函數或服務API:
| 字段 | 類型 | 是否必選 | 描述 | 示例值 |
|---|---|---|---|---|
| type | string | 是 | 操作類型,固定為“Fail” | Fail |
| arguments | map[string]string | 是 | 調用參數:
|
使用示例
以下是一個失敗狀態的定義示例:
specVersion: '0.8'
version: '1.0'
name: test
start: Fail
states:
- name: fail
type: Operation
actions:
- functionRef:
type: Fail
arguments:
errorType: customError
errorMessage: "User called fail"
end: true示例解析:
type:指定狀態類型為
Fail,表明這是一個傳遞狀態。name:狀態命名為
fail,便于在流程中識別。End:設置為
true,表示該狀態是工作流的終點,無需指定后續狀態。errorType:錯誤類型為
customError。errorMessage:錯誤消息為
User called fail。
條件分支(Switch)狀態
本節將為您詳細講解條件分支狀態(Switch)的基本概念、使用場景示例以及條件表達式的應用,幫助您更好地在工作流中運用此狀態。
基本概念
條件分支狀態(Switch)是工作流中的條件選擇工具,允許流程根據預設條件執行不同的路徑。其功能類似于編程中的 switch-case 語句。
它由若干條件(dataConditions)和一個默認條件(defaultCondition)組成,每個分支包含一個條件表達式和一個跳轉目標。
狀態屬性
條件分支狀態的屬性定義了其邏輯和行為:
| 字段 | 類型 | 是否必選 | 描述 | 示例值 |
|---|---|---|---|---|
| name | string | 是 | 狀態的名稱,用于唯一標識。 | my switch |
| type | string | 是 | 狀態類型,固定為“Switch”。 | Switch |
| dataConditions | []DataCondition | 是 | 條件列表,詳見DataCondition屬性 | |
| defaultCondition | DefaultCondition | 是 | 默認情況,詳見DefaultCondition屬性 | |
| stateDataFilter | StateDataFilter | 否 | 輸入/輸出構造器,參考流程定義介紹中StateDataFilter字段說明 |
DataCondition屬性
| 字段 | 類型 | 是否必選 | 描述 | 示例值 |
|---|---|---|---|---|
| condition | string | 是 | 條件表達式 | { $.Value > 10 } |
| transition | Transition | 否 | 參考流程定義介紹中Transition字段說明 |
DefaultCondition屬性
| 字段 | 類型 | 是否必選 | 描述 | 示例值 |
|---|---|---|---|---|
| transition | Transition | 否 | 參考流程定義介紹中Transition字段說明 |
注意事項:
條件(DataCondition)不支持直接使用
End或Transition屬性。默認分支(DefaultCondition)起到類似Transition的作用,指定條件不滿足時的路徑。條件(DataCondition)中,每個分支通過
transition字段指定條件滿足時的跳轉目標。
系統會按順序檢查每個條件的表達式:
如果某個條件被滿足,則跳轉至該條件指定的狀態繼續執行。
如果所有條件均不滿足,則執行默認條件指定的狀態和后續流程。
使用示例
以下是一個條件分支狀態的實際應用案例:
specVersion: '0.8'
version: '1.0'
name: test
start: Switch1
- name: Switch1
type: Switch
dataConditions:
- condition: "{ $Context.Input.value > 20 }"
transition: Over20
- condition: "{ $Context.Input.value > 10 }"
transition: Over10
defaultCondition:
transition: Fail
示例說明
type: 狀態類型為
Switch,表示條件分支。name: 狀態名為
Switch1。第一個condition: 條件{ $Context.Input.value > 20 },代表如果value的值大于20,則跳轉到Over20狀態繼續執行。
第二個condition: 條件{ $Context.Input.value > 10 },代表第一個condition未被滿足,如果10 < value <=20,則跳轉到Over10狀態繼續執行。
defaultCondition: 上訴兩個condition都不滿足時,跳轉到Fail狀態繼續執行。
該條件分支狀態執行示例如下:
輸入與條件結果樣例
假設輸入數據 $Input 為:
{
"x": 50,
"y": {
"y1": false,
"y2": "active"
},
"z": [10, 20, 30]
}
以下是條件表達式的執行結果:
| 條件表達式 | 執行結果 |
|---|---|
| $Input.x == 50 | true |
| $Input.x < 100 | true |
| $Input.x > 60 | false |
| $Input.y.y1 | false |
| $Input.y.y2 == “active” | true |
| $Input.z[1] == 20 | true |
提示:
表達式中可使用
$.和$Context獲取變量,具體用法請參考相關數據傳遞文檔。
條件分支狀態(Switch)通過分支和默認路徑,為工作流提供了靈活的邏輯控制能力。掌握其屬性配置和條件表達式的編寫,您可以輕松實現動態流程設計。如需更多幫助,請聯系支持團隊。
迭代(Foreach)狀態
本節為您介紹迭代狀態(Foreach)的核心概念及應用示例,指導您如何在工作流中遍歷數組并并行處理元素。
基本概念
迭代狀態(Foreach)用于遍歷輸入中的數組類型參數,對每個元素并行執行指定的處理器(Processor)狀態。其功能類似于編程語言中的foreach循環,但區別在于迭代狀態采用并行方式處理所有元素。
在執行過程中,系統并發運行輸入數組中每個元素的處理器狀態。所有分支完成后,默認生成一個包含各分支結果的map[string]any結構,并可通過數據過濾器或后續邏輯進一步處理結果。
狀態屬性
迭代狀態(Foreach)包含以下關鍵屬性,用于定義其行為和處理邏輯:
| 字段 | 類型 | 是否必選 | 描述 | 示例值 |
|---|---|---|---|---|
| name | string | 是 | 狀態的名稱,用于唯一標識。 | ForeachTest |
| type | string | 是 | 狀態類型,固定為“Foreach”。 | Foreach |
| processor | object | 是 | 迭代處理器,定義元素處理邏輯。 | 見processor說明 |
| end | bool | 否 | 表示是否為當前流程的終點。 | true |
| stateDataFilter | StateDataFilter | 否 | 輸入/輸出構造器,參考流程定義介紹中StateDataFilter字段說明 | |
| transition | Transition | 否 | 參考流程定義介紹中Transition字段說明 | |
| retryRef | RetryRef | 是 | 引用具體的重試策略,參考錯誤處理章節。 | |
| catchRef | CatchRef | 是 | 引用具體的錯誤捕獲策略,參考錯誤處理章節。 |
processor 屬性
迭代處理器,定義如何處理數組中的每個元素,每個processor定義的states組成一個子流程,從startAt指定的狀態開始執行,states中必須存在一個end狀態:
| 字段 | 類型 | 是否必選 | 描述 | 示例值 |
|---|---|---|---|---|
| startAt | string | 是 | 嵌套狀態數組的執行起點。 | ForeachNoop |
| states | array | 是 | 嵌套的狀態數組,定義處理邏輯。 |
使用示例
以下示例定義一個迭代狀態,遍歷輸入數組,處理器包含操作和休眠狀態:
specVersion: '0.8'
version: '1.0'
name: test
start: ForeachTest
states:
- name: ForeachTest
type: Foreach
processor:
startAt: ForeachNoop
states:
- name: ForeachNoop
type: Operation
actions:
- functionRef:
type: Noop
transition:
nextState: Sleep
stateDataFilter:
output:
ft: "{ $.from + '|' + $.to }"
- name: Sleep
type: Sleep
duration: 30s
end: true
end: true
metadata:
description: ''
示例說明
name: 狀態名為“ForeachTest”。
type: 狀態類型為“Foreach”。
processor: 定義處理邏輯,起始于“ForeachNoop”。
startAt: 子流程從“ForeachNoop”開始執行
states: 包含“ForeachNoop”操作狀態(執行Noop動作)和“Sleep”狀態(休眠30秒)。
end: Sleep設置end為true,說明子流程在該狀態結束。
補充說明
并行處理:迭代狀態并行處理數組元素,提升效率。
數據過濾:通過
stateDataFilter自定義輸出格式。靈活性:子流程支持嵌套多種狀態類型,如操作或休眠。
并行(Parallel)狀態
本節為您介紹并行狀態(Parallel)的核心概念及應用示例,指導您如何在工作流中實現多分支并行執行。
基本概念
并行狀態(Parallel)用于同時執行多個獨立的分支(branches),每個分支通過processor定義一個子流程。
執行時,系統并發運行所有分支內的狀態。待所有分支完成后,默認生成一個map[string]any結構,包含各分支的執行結果,并可通過后續狀態或過渡邏輯進一步處理。
狀態屬性
并行狀態包含以下關鍵屬性,用于定義其行為和執行邏輯:
| 字段 | 類型 | 是否必選 | 描述 | 示例值 |
|---|---|---|---|---|
| name | string | 是 | 狀態的名稱,用于唯一標識。 | ParallelTest |
| type | string | 是 | 狀態類型,固定為“Parallel”。 | Parallel |
| branches | []Branch | 是 | 并行分支的定義。 | 見Branch說明 |
| end | bool | 否 | 表示該狀態是否為當前分支的終點。 | true |
| stateDataFilter | StateDataFilter | 否 | 輸入/輸出構造器,參考流程定義介紹中StateDataFilter字段說明 | |
| transition | Transition | 否 | 參考流程定義介紹中Transition字段說明 | |
| retryRef | RetryRef | 是 | 引用具體的重試策略,參考錯誤處理章節。 | |
| catchRef | CatchRef | 是 | 引用具體的錯誤捕獲策略,參考錯誤處理章節。 |
Branch 屬性
定義并行分支的具體內容,每個分支包含一個處理器:
| 字段 | 類型 | 是否必選 | 描述 | 示例值 |
|---|---|---|---|---|
| processor | Processor | 是 | 處理器,定義分支的執行邏輯。 | 見Processor說明 |
Processor 屬性
定義分支內的處理邏輯:
| 字段 | 類型 | 是否必選 | 描述 | 示例值 |
|---|---|---|---|---|
| startAt | string | 是 | 嵌套狀態數組的執行起點。 | ParallelTestBranch1 |
| states | array | 是 | 嵌套的狀態數組,定義處理邏輯。 |
使用示例
以下示例定義一個并行狀態,包含三個分支,每個分支執行HTTP請求,隨后跳轉至最終狀態:
specVersion: '0.8'
version: '1.0'
name: test
start: ParallelTest
states:
- name: ParallelTest
type: Parallel
branches:
- processor:
startAt: ParallelTestBranch1
states:
- name: ParallelTestBranch1
type: Operation
actions:
- functionRef:
type: Http
arguments:
url: //www.baidu.com/home/feed/feedwater
query:
bsToken: "8e0f5a9e604a945b0a3cada1b0f1b159"
id: "2"
offset: "1"
req_type: "1"
headers:
User-Agent: "apifox"
- processor:
startAt: ParallelTestBranch2
states:
- name: ParallelTestBranch2
type: Operation
actions:
- functionRef:
type: Http
arguments:
url: //www.baidu.com/home/feed/feedwater
query:
bsToken: "8e0f5a9e604a945b0a3cada1b0f1b159"
id: "2"
offset: "1"
req_type: "1"
headers:
User-Agent: "apifox"
- processor:
startAt: ParallelTestBranch3
states:
- name: ParallelTestBranch3
type: Operation
actions:
- functionRef:
type: Http
arguments:
url: //www.baidu.com/home/feed/feedwater
query:
bsToken: "8e0f5a9e604a945b0a3cada1b0f1b159"
id: "2"
offset: "1"
req_type: "1"
headers:
User-Agent: "apifox"
transition:
nextState: Final
示例說明
name: 狀態名為“ParallelTest”。
type: 狀態類型為“Parallel”。
branches: 包含三個分支,每個分支的處理器執行HTTP請求。