

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

# 在 Amazon SWF 中设置任务优先级
<a name="programming-priority"></a>

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

**注意**  
先安排的任务通常先运行，但是也不一定。

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

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

**Topics**
+ [设置工作流的任务优先级](#task-priority-workflows)
+ [设置活动的任务优先级](#task-priority-activities)
+ [返回任务优先级信息的操作](#task-priority-responses)

## 设置工作流的任务优先级
<a name="task-priority-workflows"></a>

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

要注册具有默认任务优先级的工作流类型，请在使用[RegisterWorkflowType](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RegisterWorkflowType.html)操作时设置以下*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](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_StartWorkflowExecution.html)：

```
{
  "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](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondDecisionTaskCompleted.html)。

要设置子工作流的任务优先级，请在 `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"
      }
    }
  ]
}
```

## 设置活动的任务优先级
<a name="task-priority-activities"></a>

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

要在注册活动类型时设置任务优先级，请在使用[RegisterActivityType](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RegisterActivityType.html)操作时设置以下*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"
}
```

要计划具有任务优先级的任务，请在安排带有以下操作的活动时使用 *task* Priority 选项：[RespondDecisionTaskCompleted](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondDecisionTaskCompleted.html)

```
{
  "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"
      }
    }
  ]
}
```

## 返回任务优先级信息的操作
<a name="task-priority-responses"></a>

您可以从以下 Amazon SWF 操作中获取有关设置任务优先级（或设置默认任务优先级）的信息：
+ [DescribeActivityType](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_DescribeActivityType.html)返回响应*defaultTaskPriority*`configuration`部分中活动类型的。
+ [DescribeWorkflowExecution](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_DescribeWorkflowExecution.html)返回响应`executionConfiguration`部分中工作流程执行的*任务优先级*。
+ [DescribeWorkflowType](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_DescribeWorkflowType.html)返回响应*defaultTaskPriority*`configuration`部分中工作流程类型的。
+ [GetWorkflowExecutionHistory](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_GetWorkflowExecutionHistory.html)并在响应的`activityTaskScheduledEventAttributes`、`decisionTaskScheduledEventAttributes``workflowExecutionContinuedAsNewEventAttributes`、和`workflowExecutionStartedEventAttributes`部分中[PollForDecisionTask](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_PollForDecisionTask.html)提供任务优先级信息。