本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用超时避免执行卡顿
默认情况下,Amazon States Language 不会为状态机定义指定超时。如果没有显式超时,Step Functions 通常仅依靠来自活动工作线程的响应来了解任务是否已完成。如果发生错误并且 Activity
或 Task
状态未指定 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
字段为状态机设置超时。有关更多信息,请参阅状态机结构。