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_PROGRESSouQUEUED). -
Uma execução de trabalho anterior muda para um status final (
FAILED,SUCCEEDED,CANCELED,TIMED_OUT,REJECTEDouREMOVED).
Para obter mais informações sobre os limites com e sem a configuração de agendamento, consulteLimites de execução de trabalhos.
NextNotification
-
Uma
NextNotificationconté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
QUEUEDe é a primeira da lista. -
O status de uma execução de trabalho existente que não é a primeira da lista é alterado de
QUEUEDparaIN_PROGRESSe torna-se a primeira na lista. (Isso acontece quando não há outras execuções de trabalho deIN_PROGRESSna lista ou quando a execução de trabalho cujo status é alterado deQUEUEDparaIN_PROGRESSfoi colocado na fila antes de qualquer outra execução deIN_PROGRESSna 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 de dispositivos.
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 }