Amazon SWF 超时类型 - Amazon Simple Workflow Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon SWF 超时类型

为确保工作流执行正确运行,您可以通过 Amazon SWF 设置不同类型的超时。一些超时指定工作流程的总运行时长。其它超时指定活动任务在被分配给工作程序之前所花费的时间以及从排定到完成所花费的时间。Amazon SWF API 中的所有超时都以秒为单位。Amazon SWF 还支持将字符串 NONE 作为超时值,表示没有超时。

对于与决策任务和活动任务相关的超时,Amazon SWF 会在工作流执行历史中添加一个事件。事件的属性提供了所发生超时类型的信息以及以及受影响的决策任务或活动任务。Amazon SWF 还会计划决策任务。决策程序接收新决策任务时将会在历史中看到超时事件,并会通过调用 RespondDecisionTaskCompleted 操作来采取适当操作。

任务被视为从排定时开始到其关闭为止都处于开启状态。因此,当工作程序处理任务时,任务被报告为开启状态。当工作程序将任务状态报告为已完成已取消失败时,任务关闭。Amazon SWF 也可能会因超时而关闭任务。

工作流程和决策任务中的超时

下图显示工作流程和决策超时如何与工作流程的生命周期相关:


               工作流程的生命周期,具有超时。

与工作流程和决策任务相关的超时类型有两个:

  • 工作流启动到关闭 (timeoutType: START_TO_CLOSE) - 该超时指定了完成工作流执行所需的最长时间。工作流程注册期间,这一超时被设置为默认值,但当工作流程启动时,可用其它值覆盖该默认值。如果超出了此超时,Amazon SWF 将关闭工作流执行,并将 WorkflowExecutionTimedOut 类型的事件添加到工作流执行历史记录中。除了 timeoutType 之外,事件属性还会指定对此工作流程执行有效的 childPolicy。子策略指定上级工作流程执行超时或终止时子工作流程执行的处理方法。例如,如果 childPolicy 被设置为 TERMINATE,则子工作流程执行将被终止。一旦工作流程执行超时,则不能对其执行可视性调用之外的其他任何操作。

  • 决策任务启动到关闭 (timeoutType: START_TO_CLOSE) – 该超时指定了相应决策程序完成决策任务所需的最长时间。该超时在工作流程类型注册期间设置。如果超出了此超时,任务将在工作流执行历史记录中被标记为超时,且 Amazon SWF 会在工作流历史记录中添加一个 DecisionTaskTimedOut 类型的事件。当此决策任务被排定 (scheduledEventId) 且启动 (startedEventId) 时,事件属性中将包含对应事件的 ID。除了添加事件外,Amazon SWF 还会计划新决策任务以警告决策程序此决策任务已超时。此超时发生后,使用 RespondDecisionTaskCompleted 完成超时决策任务的尝试将失败。

活动任务中的超时

下图显示超时如何与活动任务的生命周期相关:


               任务的生命周期,具有超时

与活动任务相关的超时类型有四个:

  • 活动任务启动到关闭 (timeoutType: START_TO_CLOSE) – 该超时指定了活动工作线在接收到任务后处理任务所需的最长时间。使用 RespondActivityTaskCanceledRespondActivityTaskCompletedRespondActivityTaskFailed 尝试关闭超时的活动任务将会失败。

  • 活动任务检测信号 (timeoutType: HEARTBEAT) – 该超时指定了任务在通过 操作提供其进程前可以运行的最长时间。

  • 活动任务计划到开始 (timeoutType: SCHEDULE_TO_START) – 该超时指定了在没有工作线执行活动任务时 Amazon SWF 在活动任务超时前等待的时间。一旦超时,过期的任务就不能分配给另一工作程序。

  • 活动任务安排到关闭 (timeoutType: SCHEDULE_TO_CLOSE) – 该超时指定了任务从计划到完成所需的时间。最好的做法是,这个值不应该大于任务排定到启动超时与任务启动到关闭超时的总和。

注意

每一个超时类型都有默认值,一般设置为 NONE (无限)。但是任何活动执行的最长时间均被限制为一年。

您在活动类型注册期间设置这些活动的默认值,但当您排定活动任务时您可以用新值覆盖默认值。上述超时中有任何一个发生时,Amazon SWF 会向工作流历史记录添加一个 ActivityTaskTimedOut 类型的事件。此事件的 timeoutType 值属性将指定发生了何种超时。对于其中每一个超时,timeoutType 的值都显示在括号中。当活动任务被排定 (scheduledEventId) 且启动 (startedEventId) 时,事件属性中还将包含对应事件的 ID。除了添加事件外,Amazon SWF 还会计划新决策任务以警告决策程序已发生超时。