Notificações de trabalhos - AWS IoT Core

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 ou QUEUED).

  • Uma execução de trabalho anterior muda para um status final (FAILED, SUCCEEDED, CANCELED, TIMED_OUT, REJECTED ou REMOVED).

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 para IN_PROGRESS e torna-se a primeira na lista. (Isso acontece quando não há outras execuções de trabalho de IN_PROGRESS na lista ou quando a execução de trabalho cujo status é alterado de QUEUED para IN_PROGRESS foi colocado na fila antes de qualquer outra execução de IN_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 }