任务流 - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

任务流

下面显示了任务工作流程中的不同步骤,从启动新任务到报告任务执行的完成状态。

开始新任务

在创建新任务时,Amazon IoT Jobs 将在 $aws/things/thing-name/jobs/notify 主题上为每个目标设备发布一条消息。

消息包含以下信息:

{ "timestamp":1476214217017, "jobs":{ "QUEUED":[{ "jobId":"0001", "queuedAt":1476214216981, "lastUpdatedAt":1476214216981, "versionNumber" : 1 }] } }

在对任务执行进行排队时,设备将在 '$aws/things/thingName/jobs/notify' 主题上收到此消息。

获取任务信息

要获取有关任务执行的更多信息,请调用 DescribeJobExecution MQTT API 并将 includeJobDocument 字段设置为 true(原定设置值)。

如果请求成功,Amazon IoT Jobs 服务将在 $aws/things/MyThing/jobs/0023/get/accepted 主题上发布消息:

{ "clientToken" : "client-001", "timestamp" : 1489097434407, "execution" : { "approximateSecondsBeforeTimedOut": number, "jobId" : "023", "status" : "QUEUED", "queuedAt" : 1489097374841, "lastUpdatedAt" : 1489097374841, "versionNumber" : 1, "jobDocument" : { < contents of job document > } } }

如果请求失败,Amazon IoT Jobs 服务将在 $aws/things/MyThing/jobs/0023/get/rejected 主题上发布消息。

设备现在已有任务文档,它可使用该文档执行任务的远程操作。如果任务文档包含一个 Amazon S3 预签名 URL,则设备可使用该 URL 下载任务的任何所需文件。

报告任务执行状态

当设备执行任务时,它可调用 UpdateJobExecution MQTT API 来更新任务执行的状态。

例如,设备可通过在 IN_PROGRESS 主题上发布以下消息来将任务执行状态更新为 $aws/things/MyThing/jobs/0023/update

{ "status":"IN_PROGRESS", "statusDetails": { "progress":"50%" }, "expectedVersion":"1", "clientToken":"client001" }

Jobs 通过将消息发布到 $aws/things/MyThing/jobs/0023/update/accepted$aws/things/MyThing/jobs/0023/update/rejected 主题来做出响应:

{ "clientToken":"client001", "timestamp":1476289222841 }

设备可通过调用 StartNextPendingJobExecution 来合并两个以前的请求。这将获取并开始下一个待处理任务执行,并允许设备更新任务执行状态。此请求还在有待处理任务执行时返回任务文档。

如果任务中包含 TimeoutConfig,则进行中计时器将开始运行。您还可以在调用 UpdateJobExecution 时为 stepTimeoutInMinutes 设置一个值,从而为任务执行设置步骤计时器。步骤计时器仅应用于您更新的任务执行。您每次更新任务执行时,可以为此计时器设置新值。您还可在调用 StartNextPendingJobExecution 时创建步骤计时器。如果任务执行保持在 IN_PROGRESS 状态的时间长度超过了此步骤计时器间隔,它将失败,并切换为最终 TIMED_OUT 状态。步骤计时器对您在创建任务时设置的进行中计时器没有任何影响。

status 字段可设置为 IN_PROGRESSSUCCEEDEDFAILED。您无法更新已处于最终状态的任务执行的状态。

报告执行已完成

在设备执行完任务后,它将调用 UpdateJobExecution MQTT API。如果任务已成功,则将 status 设置为 SUCCEEDED,并在消息负载的 statusDetails 中,将有关任务的其它信息作为名称-值对添加。任务执行完成时,进行中计时器和步骤计时器结束。

例如:

{ "status":"SUCCEEDED", "statusDetails": { "progress":"100%" }, "expectedVersion":"2", "clientToken":"client-001" }

如果任务未成功,则将 status 设置为 FAILED,并在 statusDetails 中,添加有关出现的错误的信息:

{ "status":"FAILED", "statusDetails": { "errorCode":"101", "errorMsg":"Unable to install update" }, "expectedVersion":"2", "clientToken":"client-001" }
注意

statusDetails 属性可包含任意数量的名称-值对。

在 Amazon IoT Jobs 服务收到此更新时,它会在 $aws/things/MyThing/jobs/notify 主题上发布消息以指示任务执行已完成:

{ "timestamp":1476290692776, "jobs":{} }

其它任务

如果设备有其它待处理的任务执行,这些任务执行将包含在发布到 $aws/things/MyThing/jobs/notify 的消息中。

例如:

{ "timestamp":1476290692776, "jobs":{ "QUEUED":[{ "jobId":"0002", "queuedAt":1476290646230, "lastUpdatedAt":1476290646230 }], "IN_PROGRESS":[{ "jobId":"0003", "queuedAt":1476290646230, "lastUpdatedAt":1476290646230 }] } }