As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Notificações de trabalhos
O serviço AWS IoT Jobs publica mensagens MQTT em tópicos reservados quando os trabalhos estão pendentes ou quando a primeira execução do trabalho na lista é alterada. Os dispositivos podem acompanhar trabalhos pendentes assinando esses tópicos.
Tipos de notificação de trabalhos
As notificações de trabalhos são publicadas em tópicos MQTT como cargas JSON. Há dois tipos de notificações:
ListNotification
Uma ListNotification
contém uma lista de até 15 execuções de trabalhos pendentes. Elas são classificados por status (execuções de trabalho de IN_PROGRESS
antes de execuções de trabalhos de QUEUED
) e, em seguida, pelo número de vezes em que foram colocadas em fila.
Uma ListNotification
é publicada sempre que um dos seguintes critérios são atendidos.
-
Uma nova execução de trabalho é colocada na fila ou muda para um status terminal (
IN_PROGRESS
ouQUEUED
). -
Uma execução de trabalho anterior muda para um status final (
FAILED
,SUCCEEDED
,CANCELED
,TIMED_OUT
,REJECTED
ouREMOVED
).
Notificação de lista (até 15 execuções de trabalhos pendentes em QUEUED ou IN_PROGRESS ) |
|
---|---|
Sem configuração de agendamento opcional e janela de manutenção recorrente (Até 10 execuções de trabalhos) |
Com configuração de agendamento opcional e janela de manutenção recorrente (Até 5 execuções de trabalhos) |
Sempre aparece no ListNotification. |
Só aparece na janela ListNotification durante a manutenção. |
NextNotification
-
Uma
NextNotification
contém informações resumidas sobre a próxima execução de trabalho da fila.Uma
NextNotification
é publicada sempre que a primeira execução de trabalho da lista é alterada.-
Uma nova execução é adicionada à lista como
QUEUED
e é a primeira da lista. -
O status de uma execução de trabalho existente que não é a primeira da lista é alterado de
QUEUED
paraIN_PROGRESS
e torna-se a primeira na lista. (Isso acontece quando não há outras execuções de trabalho deIN_PROGRESS
na lista ou quando a execução de trabalho cujo status é alterado deQUEUED
paraIN_PROGRESS
foi colocado na fila antes de qualquer outra execução deIN_PROGRESS
na lista.) -
O status da primeira execução de trabalho da lista é alterado para um status terminal e é removido da lista.
-
Para obter mais informações sobre publicação e assinatura em tópicos MQTT, consulte Protocolos de comunicação do dispositivo.
nota
As notificações não estão disponíveis quando você usa HTTP Signature Versão 4 ou HTTP TLS para se comunicar com os trabalhos.
Trabalho pendente
O serviço AWS IoT Jobs publica uma mensagem em um tópico do MQTT quando um trabalho é adicionado ou removido da lista de execuções pendentes de um item ou quando a primeira execução de um trabalho na lista muda:
-
$aws/things/
thingName
/jobs/notify -
$aws/things/
thingName
/jobs/notify-next
As mensagens contêm as seguintes cargas de exemplo:
$aws/things/
:thingName
/jobs/notify
{ "timestamp" : 10011, "jobs" : { "IN_PROGRESS" : [ { "jobId" : "other-job", "queuedAt" : 10003, "lastUpdatedAt" : 10009, "executionNumber" : 1, "versionNumber" : 1 } ], "QUEUED" : [ { "jobId" : "this-job", "queuedAt" : 10011, "lastUpdatedAt" : 10011, "executionNumber" : 1, "versionNumber" : 0 } ] } }
Se a execução do trabalho chamada this-job
tiver origem em um trabalho com a configuração de agendamento opcional selecionada e a distribuição do documento de trabalho programada para ocorrer durante uma janela de manutenção, ela aparecerá somente durante uma janela de manutenção recorrente. Fora de uma janela de manutenção, o trabalho chamado this-job
será excluído da lista de execuções de trabalhos pendentes, conforme mostrado no exemplo a seguir.
{ "timestamp" : 10011, "jobs" : { "IN_PROGRESS" : [ { "jobId" : "other-job", "queuedAt" : 10003, "lastUpdatedAt" : 10009, "executionNumber" : 1, "versionNumber" : 1 } ], "QUEUED" : [] } }
$aws/things/
:thingName
/jobs/notify-next
{ "timestamp" : 10011, "execution" : { "jobId" : "other-job", "status" : "IN_PROGRESS", "queuedAt" : 10009, "lastUpdatedAt" : 10009, "versionNumber" : 1, "executionNumber" : 1, "jobDocument" : {"c":"d"} } }
Se a execução do trabalho chamada other-job
tiver origem em um trabalho com a configuração de agendamento opcional selecionada e a distribuição do documento de trabalho programada para ocorrer durante uma janela de manutenção, ela aparecerá somente durante uma janela de manutenção recorrente. Fora de uma janela de manutenção, o trabalho chamado other-job
não será listado como a próxima execução do trabalho, conforme mostrado no exemplo a seguir.
{} //No other pending jobs
{ "timestamp" : 10011, "execution" : { "jobId" : "this-job", "queuedAt" : 10011, "lastUpdatedAt" : 10011, "executionNumber" : 1, "versionNumber" : 0, "jobDocument" : {"a":"b"} } } // "this-job" is pending next to "other-job"
Os possíveis valores do status da execução do trabalho são QUEUED
, IN_PROGRESS
, FAILED
, SUCCEEDED
, CANCELED
, TIMED_OUT
, REJECTED
e REMOVED
.
A série de exemplos a seguir mostra as notificações publicadas em cada tópico quando as execuções de um trabalho são criadas e mudam de um estado para outro.
Primeiro, é criado um trabalho chamado job1
. Essa notificação é publicada no tópico jobs/notify
:
{ "timestamp": 1517016948, "jobs": { "QUEUED": [ { "jobId": "job1", "queuedAt": 1517016947, "lastUpdatedAt": 1517016947, "executionNumber": 1, "versionNumber": 1 } ] } }
Essa notificação é publicada no tópico jobs/notify-next
:
{ "timestamp": 1517016948, "execution": { "jobId": "job1", "status": "QUEUED", "queuedAt": 1517016947, "lastUpdatedAt": 1517016947, "versionNumber": 1, "executionNumber": 1, "jobDocument": { "operation": "test" } } }
Ao criar outro trabalho (job2
), essa notificação é publicada no tópico jobs/notify
:
{ "timestamp": 1517017192, "jobs": { "QUEUED": [ { "jobId": "job1", "queuedAt": 1517016947, "lastUpdatedAt": 1517016947, "executionNumber": 1, "versionNumber": 1 }, { "jobId": "job2", "queuedAt": 1517017191, "lastUpdatedAt": 1517017191, "executionNumber": 1, "versionNumber": 1 } ] } }
Não é publicada uma notificação no tópico jobs/notify-next
porque o próximo trabalho da fila (job1
) não sofreu alteração. Quando job1
começa a executar, o status muda para IN_PROGRESS
. Não são publicadas notificações porque a lista de trabalhos e o próximo trabalho na fila não sofreram alterações.
Ao adicionar um terceiro trabalho (job3
), essa notificação é publicada no tópico jobs/notify
:
{ "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 } ] } }
Não é publicada uma notificação no tópico jobs/notify-next
porque o próximo trabalho da fila ainda é job1
.
Quando job1
for concluído, o status mudará para SUCCEEDED
e essa notificação será publicada no tópico jobs/notify
:
{ "timestamp": 1517186269, "jobs": { "QUEUED": [ { "jobId": "job2", "queuedAt": 1517017191, "lastUpdatedAt": 1517017191, "executionNumber": 1, "versionNumber": 1 }, { "jobId": "job3", "queuedAt": 1517017905, "lastUpdatedAt": 1517017905, "executionNumber": 1, "versionNumber": 1 } ] } }
A essa altura, job1
já terá sido removido da fila e o próximo trabalho a ser executado será job2
. Essa notificação é publicada no tópico jobs/notify-next
:
{ "timestamp": 1517186269, "execution": { "jobId": "job2", "status": "QUEUED", "queuedAt": 1517017191, "lastUpdatedAt": 1517017191, "versionNumber": 1, "executionNumber": 1, "jobDocument": { "operation": "test" } } }
Se o job3
precisar começar antes do job2
(o que não é recomendado), o status do job3
será alterado para IN_PROGRESS
. Se isso acontecer, o job2
não será mais o próximo na fila, e essa notificação será publicada no tópico jobs/notify-next
:
{ "timestamp": 1517186779, "execution": { "jobId": "job3", "status": "IN_PROGRESS", "queuedAt": 1517017905, "startedAt": 1517186779, "lastUpdatedAt": 1517186779, "versionNumber": 2, "executionNumber": 1, "jobDocument": { "operation": "test" } } }
Nenhuma notificação é publicada no tópico jobs/notify
porque nenhum trabalho foi adicionado ou removido.
Se o dispositivo rejeitar o job2
e atualizar seu status para REJECTED
, essa notificação será publicada no tópico jobs/notify
:
{ "timestamp": 1517189392, "jobs": { "IN_PROGRESS": [ { "jobId": "job3", "queuedAt": 1517017905, "lastUpdatedAt": 1517186779, "startedAt": 1517186779, "executionNumber": 1, "versionNumber": 2 } ] } }
Se a exclusão do job3
(que ainda está em andamento) for forçada, essa notificação será publicada no tópico jobs/notify
:
{ "timestamp": 1517189551, "jobs": {} }
Nesse ponto, a fila está vazia. Essa notificação é publicada no tópico jobs/notify-next
:
{ "timestamp": 1517189551 }