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

设置任务优先级

默认情况下,任务列表上的任务将基于其到达时间进行交付:首先安排的任务首先运行。通过设置可选的任务优先级,您可以设定特定任务的优先级:&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 部分中提供任务优先级信息。