设置任务优先级 - Amazon Simple Workflow Service

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

设置任务优先级

默认情况下,任务列表上的任务将基于其到达时间进行交付:首先安排的任务通常会尽可能首先运行。通过设置可选的任务优先级,您可以设定特定任务的优先级:Amazon SWF 会尝试先交付任务列表上优先级较高的任务,然后再交付优先级较低的任务。

注意

先安排的任务通常先运行,但是也不一定。

您可以同时为工作流和活动设置任务优先级。工作流的任务优先级既不影响其安排的任何活动的任务优先级,也不影响其开始的任何子工作流。活动或工作流的默认优先级是由您或 Amazon SWF 在注册过程中设置的,除非在安排活动或启动工作流执行时覆盖了注册的任务优先级,否则应始终使用默认优先级。

任务优先级值的范围可为“-2147483648”到“2147483647”,数字越大优先级越高。如果您未为活动或工作流设置任务优先级,则将为其分配零(“0”)优先级。

设置工作流的任务优先级

在您注册或开始工作流时,可以设置其任务优先级。注册工作流类型时设置的任务优先级将用作执行该类型的任何工作流的默认优先级,除非该优先级在开始执行工作流时被覆盖。

要注册具有默认任务优先级的工作流类型,请在使用在 RegisterWorkflowType 操作时设置 defaultTaskPriority 选项:

{ "domain": "867530901", "name": "expeditedOrderWorkflow", "version": "1.0", "description": "Expedited customer orders workflow", "defaultTaskStartToCloseTimeout": "600", "defaultExecutionStartToCloseTimeout": "3600", "defaultTaskList": {"name": "mainTaskList"}, "defaultTaskPriority": "10", "defaultChildPolicy": "TERMINATE" }

您可以在使用 StartWorkflowExecution 开始工作流执行时覆盖工作流类型的已注册的任务优先级:

{ "childPolicy": "TERMINATE", "domain": "867530901", "executionStartToCloseTimeout": "1800", "input": "arbitrary-string-that-is-meaningful-to-the-workflow", "tagList": ["music purchase", "digital", "ricoh-the-dog"], "taskList": {"name": "specialTaskList"}, "taskPriority": "-20", "taskStartToCloseTimeout": "600", "workflowId": "20110927-T-1", "workflowType": {"name": "customerOrderWorkflow", "version": "1.0"}, }

您还可以在开始子工作流或将一个工作流作为新的工作流继续执行(如利用 RespondDecisionTaskCompleted 响应决策)时覆盖已注册的任务优先级。

要设置子工作流的任务优先级,请在 startChildWorkflowExecutionDecisionAttributes 中提供值:

{ "taskToken": "AAAAKgAAAAEAAAAAAAAAA...", "decisions": [ { "decisionType": "StartChildWorkflowExecution", "startChildWorkflowExecutionDecisionAttributes": { "childPolicy": "TERMINATE", "control": "digital music", "executionStartToCloseTimeout": "900", "input": "201412-Smith-011x", "taskList": {"name": "specialTaskList"}, "taskPriority": "5", "taskStartToCloseTimeout": "600", "workflowId": "verification-workflow", "workflowType": { "name": "MyChildWorkflow", "version": "1.0" } } } ] }

在将一个工作流作为新的工作流继续执行时,请在 continueAsNewWorkflowExecutionDecisionAttributes 中设置任务优先级:

{ "taskToken": "AAAAKgAAAAEAAAAAAAAAA...", "decisions": [ { "decisionType": "ContinueAsNewWorkflowExecution", "continueAsNewWorkflowExecutionDecisionAttributes": { "childPolicy": "TERMINATE", "executionStartToCloseTimeout": "1800", "input": "5634-0056-4367-0923,12/12,437", "taskList": {"name": "specialTaskList"}, "taskStartToCloseTimeout": "600", "taskPriority": "100", "workflowTypeVersion": "1.0" } } ] }

设置活动的任务优先级

您可以在注册或安排活动时设置该活动的任务优先级。注册活动类型时设置的任务优先级将用作运行活动时的默认优先级,除非该优先级在安排活动时被覆盖。

要在注册活动类型时设置任务优先级,请在使用在 RegisterActivityType 操作时设置 defaultTaskPriority 选项:

{ "defaultTaskHeartbeatTimeout": "120", "defaultTaskList": {"name": "mainTaskList"}, "defaultTaskPriority": "10", "defaultTaskScheduleToCloseTimeout": "900", "defaultTaskScheduleToStartTimeout": "300", "defaultTaskStartToCloseTimeout": "600", "description": "Verify the customer credit card", "domain": "867530901", "name": "activityVerify", "version": "1.0" }

要计划具有任务优先级的任务,请在使用 RespondDecisionTaskCompleted 操作计划活动时设置 taskPriority 选项:

{ "taskToken": "AAAAKgAAAAEAAAAAAAAAA...", "decisions": [ { "decisionType": "ScheduleActivityTask", "scheduleActivityTaskDecisionAttributes": { "activityId": "verify-account", "activityType": { "name": "activityVerify", "version": "1.0" }, "control": "digital music", "input": "abab-101", "taskList": {"name": "mainTaskList"}, "taskPriority": "15" } } ] }

返回任务优先级信息的操作

您可以从以下 Amazon SWF 操作中获取有关设置任务优先级(或设置默认任务优先级)的信息:

  • DescribeActivityType 在响应的 configuration 部分中返回活动类型的 defaultTaskPriority

  • DescribeWorkflowExecution 在响应的 executionConfiguration 部分中返回工作流执行的 taskPriority

  • DescribeWorkflowType 在响应的 configuration 部分中返回工作流类型的 defaultTaskPriority

  • GetWorkflowExecutionHistoryPollForDecisionTask 在响应的 activityTaskScheduledEventAttributesdecisionTaskScheduledEventAttributesworkflowExecutionContinuedAsNewEventAttributesworkflowExecutionStartedEventAttributes 部分中提供任务优先级信息。