Jobs notifications
Job notifications are published to MQTT topics as JSON payloads. There are two kinds of notifications:
- ListNotification 包含一个列表
- NextNotification 包含下一个要执行的任务
Job pending
当某个事物的待处理任务执行列表中添加或删除了任务时,或者列表中的第一个任务执行更改时,AWS IoT Jobs 服务会在 MQTT 主题上发布消息:
$aws/things/thingName/jobs/notify
$aws/things/thingName/jobs/notify-next
多个job时设备的执行状态
1.首先,创建了一个名为 job1 的任务。此通知发布到 jobs/notify 主题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| { "timestamp": 1517016948, "jobs": { "QUEUED": [ { "jobId": "job1", "queuedAt": 1517016947, "lastUpdatedAt": 1517016947, "executionNumber": 1, "versionNumber": 1 } ] } }
|
此通知发布到 jobs/notify-next 主题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| { "timestamp": 1517016948, "execution": { "jobId": "job1", "status": "QUEUED", "queuedAt": 1517016947, "lastUpdatedAt": 1517016947, "versionNumber": 1, "executionNumber": 1, "jobDocument": { "operation": "test" } } }
|
当创建另一个任务 (job2) 时,此通知将发布到 jobs/notify 主题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| { "timestamp": 1517017192, "jobs": { "QUEUED": [ { "jobId": "job1", "queuedAt": 1517016947, "lastUpdatedAt": 1517016947, "executionNumber": 1, "versionNumber": 1 }, { "jobId": "job2", "queuedAt": 1517017191, "lastUpdatedAt": 1517017191, "executionNumber": 1, "versionNumber": 1 } ] } }
|
通知未发布到 jobs/notify-next 主题,因为队列中的下一个任务 (job1) 尚未更改。当 job1 开始执行时,其状态更改为 IN_PROGRESS。没有发布任何通知,因为任务列表和队列中的下一个任务尚未更改。
当添加第三个任务 (job3) 时,此通知将发布到 jobs/notify 主题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| { "timestamp": 1517017906, "jobs": { "IN_PROGRESS": [ { "jobId": "job1", "queuedAt": 1517016947, "lastUpdatedAt": 1517017472, "startedAt": 1517017472, "executionNumber": 1, "versionNumber": 2 } ], "QUEUED": [ { "jobId": "job2", "queuedAt": 1517017191, "lastUpdatedAt": 1517017191, "executionNumber": 1, "versionNumber": 1 }, { "jobId": "job3", "queuedAt": 1517017905, "lastUpdatedAt": 1517017905, "executionNumber": 1, "versionNumber": 1 } ] } }
|
通知未发布到 jobs/notify-next 主题,因为队列中的下一个任务仍为 job1。
当 job1 完成后,其状态更改为 SUCCEEDED,此通知将发布到 jobs/notify 主题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| { "timestamp": 1517186269, "jobs": { "QUEUED": [ { "jobId": "job2", "queuedAt": 1517017191, "lastUpdatedAt": 1517017191, "executionNumber": 1, "versionNumber": 1 }, { "jobId": "job3", "queuedAt": 1517017905, "lastUpdatedAt": 1517017905, "executionNumber": 1, "versionNumber": 1 } ] } }
|
此时,已从队列中删除 job1,要执行的下一个任务是 job2。此通知发布到 jobs/notify-next 主题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| { "timestamp": 1517186269, "execution": { "jobId": "job2", "status": "QUEUED", "queuedAt": 1517017191, "lastUpdatedAt": 1517017191, "versionNumber": 1, "executionNumber": 1, "jobDocument": { "operation": "test" } } }
|
如果 job3 必须在 job2 之前开始执行(不推荐),job3 的状态可以更改为 IN_PROGRESS。更改后,job2 则不再是队列中的下一个任务,此通知将发布到 jobs/notify-next 主题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| { "timestamp": 1517186779, "execution": { "jobId": "job3", "status": "IN_PROGRESS", "queuedAt": 1517017905, "startedAt": 1517186779, "lastUpdatedAt": 1517186779, "versionNumber": 2, "executionNumber": 1, "jobDocument": { "operation": "test" } } }
|
没有向 jobs/notify 主题发布任何通知,因为没有添加或删除任何任务。
如果设备拒绝 job2,并且将其状态更新为 REJECTED,则此通知将发布到 jobs/notify 主题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| { "timestamp": 1517189392, "jobs": { "IN_PROGRESS": [ { "jobId": "job3", "queuedAt": 1517017905, "lastUpdatedAt": 1517186779, "startedAt": 1517186779, "executionNumber": 1, "versionNumber": 2 } ] } }
|
如果 job3(仍在进行)被强制删除,则此通知将发布到 jobs/notify 主题:
1 2 3 4
| { "timestamp": 1517189551, "jobs": {} }
|
此时队列为空。此通知发布到 jobs/notify-next 主题:
1 2 3
| { "timestamp": 1517189551 }
|
参考链接:
https://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/jobs-comm-notifications.html
https://docs.aws.amazon.com/iot/latest/developerguide/jobs-comm-notifications.html#jobs-comm-pending