Map狀態默認以內聯模式運行,內聯模式可以用于批量處理數據,簡化數據的轉換與處理流程,適用于操作集合內的每個元素,強調單一節點的處理。
基本概念
迭代狀態遍歷輸入中的某個數組類型參數,對于數組中的每個元素,并行執行其處理器(Processor)狀態。迭代狀態類似于編程語言中的foreach
,不同之處是這里的迭代是并行執行的。
執行并行迭代步驟會并發執行輸入參數中的每個元素的處理器狀態。當所有分支執行結束后,默認將輸出一個包含所有分支結果的map[string]any,然后通過輸出構造器將結果進行進一步處理。
內聯模式包含以下屬性:
字段 | 類型 | 是否必選 | 描述 | 示例值 |
Name | string | 是 | 狀態名稱。 | my-state-name |
Description | string | 否 | 狀態描述。 | describe it here |
Type | string | 是 | 狀態類型。 | Map |
InputConstructor | map[string]any | 否 | 輸入構造器。 | 請參見輸入和輸出 |
ItemsPath | string | 是 | 用于提取輸入數組的表達式。 | 請參見ItemsPath |
Processor | Processor | 是 | 迭代處理器。 | 請參見Processor |
OutputConstructor | map[string]any | 否 | 輸出構造器。 | 請參見狀態輸出構造器 |
Next | string | 否 | 當前狀態的下一狀態。當End取值為true時,無需指定。 | my-next-state |
End | bool | 否 | 是否為當前作用域的終結節點。 | true |
Retry | Retry | 否 | 用于定義錯誤重試策略。 | 請參見錯誤處理 |
Catch | Catch | 否 | 用于定義錯誤捕獲策略。 | 請參見錯誤處理 |
MaxConcuccency | int | 否 | 用于配置最大并發數。 | 28 |
內聯模式的關鍵字段
ItemsPath
用于提取輸入數組的表達式。該表達式執行后返回JSON Array,則可以進行迭代,將其中每個元素傳入ItemProcessor進行處理;可使用表達式變量$Context和$Input,示例如下:
$Input.FieldA
Processor
迭代處理器。包含以下兩個字段:
字段 | 類型 | 是否必選 | 描述 | 示例值 |
States | array | 是 | 內部嵌套的狀態數組。 |
|
StartAt | string | 是 | 內部嵌套狀態數組的執行起點。 | my start task |
MaxConcuccency
MaxConcurrency支持對子工作流執行的并發配置,最大并發數可達到40。
使用示例
以下示例流程定義一個迭代狀態,這個迭代步驟處理器包含一個通過狀態。
Type: StateMachine
Name: my-wkfl
SpecVersion: v1
StartAt: Map1
States:
- Type: Map
Name: Map1
End: true
InputConstructor:
FieldA:
- a : b
- c : d
- e : f
ItemsPath: $Input.FieldA
Processor:
StartAt: Pass1
States:
- Type: Pass
Name: Pass1
End: true
流程的輸入構造結果如下所示。
{
"FieldA": [
{
"a": "b"
},
{
"c": "d"
},
{
"e": "f"
}
]
}
針對Map,系統會對所有迭代Processor的輸出結果進行合并,默認以關鍵字 "Items" 作為Key,合并后的結果作為Value;Map1
的輸出結果如下所示, 自動添加此輸出也是最后流程執行的輸出。
{
"Items": [
{
"a": "b"
},
{
"c": "d"
},
{
"e": "f"
}
]
}