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

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

任务流

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

开始新任务

创建新任务后,J Amazon IoT obs 会为每台目标设备发布一条有关该$aws/things/thing-name/jobs/notify主题的消息。

消息包含以下信息:

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

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

注意

对于具有可选 SchedulingConfig 的任务,该任务将保持初始状态 SCHEDULED。当任务达到所选的 startTime 时,将发生以下情况:

  • 任务状态将更新为 IN_PROGRESS

  • 任务将开始向目标组中的所有设备推出任务文档。

获取任务信息

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

如果请求成功, Amazon IoT 作业服务将发布一条有关该$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 作业服务将发布一条有关该$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,则正在进行的计时器开始运行。您还可以通过设置调用时的值来为任务执行设置步进计stepTimeoutInMinutes时器UpdateJobExecution。步骤计时器仅应用于您更新的任务执行。您每次更新任务执行时,可以为此计时器设置新值。您也可以在呼叫时创建计步器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 }] } }