6.7. 超时
OpenShift Serverless Logic 定义了几个超时配置,可用于在不同场景中为工作流执行配置最大时间。您可以配置工作流可以等待事件达到给定状态或工作流的最大执行时间。
无论在哪里定义,超时都必须配置为一定的时间或持续时间,它会在引用工作流元素处于活跃状态时开始。超时使用 ISO 8601 数据和时间标准
来指定持续时间,并遵循 PnDTnHnMn.nS
格式,其中天数被视为完全 24 小时。例如,PT15M
配置 15 分钟,P2DT3H4M
定义 2 天、3 小时和 4 分钟。
基于月的超时(如 P2M
)或两个月的期限无效,因为月持续时间可能会有所不同。在这种情况下,改为使用 PT60D
。
6.7.1. 工作流超时
要配置在取消工作流前可以运行的最大时间,您可以使用工作流超时。取消后,工作流将被视为已完成,无法通过 GET 请求访问。因此,它的行为与默认情况下 中断
一样。
工作流超时使用顶级 timeout 属性定义。它可以有两种类型的
字符串
。和对象
字符串类型
定义了指向包含工作流超时定义的 JSON 或 YAML 文件的 URI。对象类型
用于定义内联超时定义。
例如,要在执行一小时后取消工作流,请使用以下配置:
工作流超时示例
{ "id": "workflow_timeouts", "version": "1.0", "name": "Workflow Timeouts", "description": "Simple workflow to show the workflowExecTimeout working", "start": "PrintStartMessage", "timeouts": { "workflowExecTimeout": "PT1H" } ... }
6.7.2. 事件超时
当您在工作流中定义状态时,您可以使用 timeout 属性配置最大时间来完成此状态。当那时过来时,状态被视为超时,引擎将继续从此状态执行。执行流取决于状态类型,例如,可能会执行过渡到下一状态。
基于事件的状态可以使用 sub-property eventTimeout
来配置等待事件到达的最长时间。这是当前实现中唯一支持的属性。
事件超时支持回调状态超时、交换机状态超时和事件状态超时。
6.7.2.1. 回调状态超时
当您必须正常调用外部服务时,可以使用 Callback
状态,并等待事件形式的异步响应。
在响应事件被消耗后,工作流将继续执行,一般地移至 transition 属性中定义的下一个状态。
由于 Callback
状态在事件被使用前停止执行,因此您可以为它配置 eventTimeout,如果事件没有到达配置的时间持续时间,工作流将继续移至转换中定义的下一个状态。
带有超时 的回调
状态示例
{ "name": "CallbackState", "type": "callback", "action": { "name": "callbackAction", "functionRef": { "refName": "callbackFunction", "arguments": { "input": "${\"callback-state-timeouts: \" + $WORKFLOW.instanceId + \" has executed the callbackFunction.\"}" } } }, "eventRef": "callbackEvent", "transition": "CheckEventArrival", "onErrors": [ { "errorRef": "callbackError", "transition": "FinalizeWithError" } ], "timeouts": { "eventTimeout": "PT30S" } }
6.7.2.2. 切换状态超时
当您需要根据特定条件执行操作时,您可以使用 Switch
状态。这些条件可以基于工作流数据、dataConditions
或 events eventConditions
。
使用 eventConditions
时,工作流执行会等待决定决定,直到任何配置的事件到达并匹配一个条件。在这种情况下,您可以配置一个事件超时,该超时控制事件与条件匹配的最长时间。
如果这个时间过期,工作流将移到 defaultCondition
属性中定义的状态。
带有超时的 Switch 状态示例
{ "name": "ChooseOnEvent", "type": "switch", "eventConditions": [ { "eventRef": "visaApprovedEvent", "transition": "ApprovedVisa" }, { "eventRef": "visaDeniedEvent", "transition": "DeniedVisa" } ], "defaultCondition": { "transition": "HandleNoVisaDecision" }, "timeouts": { "eventTimeout": "PT5S" } }
6.7.2.3. 事件状态超时
Event
状态用于等待工作流接收一个或多个事件,执行一组操作,然后继续执行。如果 Event 状态是启动状态,则会创建一个新的工作流实例。
timeout
属性用于此状态,用于配置工作流应等待配置的事件到达的最长时间。
如果超过这个时间,并且不会收到事件,工作流将移到 transition 属性中定义的状态,或结束工作流实例(如果是 end 状态),而不执行任何操作。
带有超时的事件状态示例
{ "name": "WaitForEvent", "type": "event", "onEvents": [ { "eventRefs": [ "event1" ], "eventDataFilter": { "data": "${ \"The event1 was received.\" }", "toStateData": "${ .exitMessage }" }, "actions": [ { "name": "printAfterEvent1", "functionRef": { "refName": "systemOut", "arguments": { "message": "${\"event-state-timeouts: \" + $WORKFLOW.instanceId + \" executing actions for event1.\"}" } } } ] }, { "eventRefs": [ "event2" ], "eventDataFilter": { "data": "${ \"The event2 was received.\" }", "toStateData": "${ .exitMessage }" }, "actions": [ { "name": "printAfterEvent2", "functionRef": { "refName": "systemOut", "arguments": { "message": "${\"event-state-timeouts: \" + $WORKFLOW.instanceId + \" executing actions for event2.\"}" } } } ] } ], "timeouts": { "eventTimeout": "PT30S" }, "transition": "PrintExitMessage" }