Jobs notifications

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