使用超时避免执行卡顿 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用超时避免执行卡顿

默认情况下,Amazon States Language 不会为状态机定义指定超时。如果没有显式超时,Step Functions 通常仅依靠来自活动工作线程的响应来了解任务是否已完成。如果发生错误并且 ActivityTask 状态未指定 TimeoutSeconds 字段,则执行会卡住,等待永远不会出现的响应。

为避免这种情况,请在状态机中创建 Task 时指定合理的超时。例如:

"ActivityState": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:HelloWorld", "TimeoutSeconds": 300, "Next": "NextState" }

如果您使用使用任务令牌发出回调 (.waitForTaskToken),我们建议您使用检测信号并在 Task 状态定义中添加 HeartbeatSeconds 字段。您可以将 HeartbeatSeconds 设置为小于任务超时时间,因此,如果您的工作流因检测信号错误而失败,那么您就知道这是因为任务失败,而不是任务需要很长时间才能完成。

{ "StartAt": "Push to SQS", "States": { "Push to SQS": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "HeartbeatSeconds": 600, "Parameters": { "MessageBody": { "myTaskToken.$": "$$.Task.Token" }, "QueueUrl": "https://sqs.us-east-1.amazonaws.com/123456789012/push-based-queue" }, "ResultPath": "$.SQS", "End": true } } }

有关更多信息,请参阅 Amazon States Language 文档中的 Task

注意

您可以使用 Amazon States Language 定义中的 TimeoutSeconds 字段为状态机设置超时。有关更多信息,请参阅状态机结构