控制
有五個節點負責駕馭情境的執行流程。
提醒一下:任何節點都還帶有隱含的 in、error 和 done 連接埠 — 請參閱
連接埠與連結。
Input / Param(輸入 / 參數)
Section titled “Input / Param(輸入 / 參數)”宣告情境的參數。
| 輸入 | 無 |
| 輸出 | value — 一個單一物件 { name: value, … } |
| 設定 | name(參數名稱)、valueType(它的型別與預設值) |
值在啟動時提供,可以用命令列的 --param name=value 給定;如果執行走到這個節點時
還沒有值可用,就會以互動方式向您詢問。
Input「baseUrl」(字串) ──► 請求的 env 連接埠Output / Return(輸出 / 回傳)
Section titled “Output / Return(輸出 / 回傳)”把一個結果公開給情境的呼叫方。
| 輸入 | value |
| 輸出 | 無 — 它是一個終點:既沒有 error,也沒有 done |
| 設定 | name |
被執行情境動作呼叫的情境,會把它的每一個輸出都放到呼叫方的
output:<name> 連接埠上。
If(條件判斷)
Section titled “If(條件判斷)”兩路分支。
| 輸入 | left、right |
| 輸出 | then、else |
| 設定 | operator:lt、lte、eq、gte、gt、ne、contains — 另外還有以字面值給定的 left 與 right |
小技巧:如果兩個運算元都沒接線也沒填值,這個節點就只單純判斷 in 上收到的訊
號是否為真。這就是那種沒有明確條件、只問「有沒有走到這裡」的用法。
Switch(分支)
Section titled “Switch(分支)”N 路分支。
| 輸入 | on |
| 輸出 | 每個已宣告的分支一個 case-<id> 連接埠,另加 default |
| 設定 | cases:一份 { id, value } 的清單 |
只要出口超過兩個,它就比一串 If 好用:每個分支都是獨立的一條線,看圖就懂。
Retry(重試)
Section titled “Retry(重試)”錯誤重試的邊界。
| 輸入 | maxAttempts、delay |
| 輸出 | attempt(每一次嘗試)、exhausted(嘗試次數用盡) |
| 設定 | 見下表 |
| 欄位 | 預設 | 作用 |
|---|---|---|
maxAttempts | 3 | 最多嘗試幾次 |
backoff | fixed | fixed、linear 或 exponential |
delay + delayUnit | — | 基礎延遲(ms、s、min) |
factor | 2 | 指數模式下的成長係數 |
maxDelay + maxDelayUnit | — | 延遲的上限 |
retryOnError | true | 發生錯誤時重試 |
retryOnFailure | false | 業務邏輯失敗時重試 |
retryOnStatus | — | 一份 HTTP 狀態碼清單,例如 [429, 503] |
接在 attempt 上的子圖就是會被重試的範圍。成功時會從 done 出去。
這個節點沒有 error 連接埠:因為它自己就是那道邊界。
Retry (3, exponential, [429,503]) ├─ attempt ──► HTTP 請求 ──► Assert └─ exhausted ──► Throw「服務無法使用」