使用超时避免执行卡顿 - AWS Step Functions

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

使用超时避免执行卡顿

默认情况下,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 文档中的 任务状态

注意

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