

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
<a name="jobs-comm-notifications"></a>

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
<a name="jobs-comm-notifications-types"></a>

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`).

Para acessar mais informações sobre os limites com e sem a configuração de agendamento, consulte [Limites de execuções de trabalhos](job-limits.md#job-execution-limits).

**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](protocols.md).

**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
<a name="jobs-comm-pending"></a>

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
}
```