Amazon Simple Workflow Service
开发人员指南 (API 版本 2012-01-25)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

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):这一操作指定了任务在通过 RecordActivityTaskHeartbeat 操作提供其进程前能有的最大运行时间。

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

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

注意

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

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