

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Notifications Jobs
<a name="jobs-comm-notifications"></a>

Le service AWS IoT Jobs publie des messages MQTT sur des sujets réservés lorsque des tâches sont en attente ou lorsque la première exécution de tâche de la liste change. Les appareils peuvent suivre les tâches en attente en s’abonnant à ces rubriques.

## Type de notification de tâche.
<a name="jobs-comm-notifications-types"></a>

Les notifications de tâche sont publiées dans les rubriques MQTT en tant que charges utilises JSON. Il existe deux types de notifications :

**ListNotification**

Une `ListNotification` contient la liste de 15 exécutions de tâche en attente au plus. Elles sont triées par statut (les exécutions de tâche `IN_PROGRESS` précèdent les exécutions de tâche `QUEUED`), puis selon le moment auquel elles ont été mises en file d'attente.

Une `ListNotification` est publiée chaque fois que l'une des conditions ci-dessous est remplie.
+ Une nouvelle exécution de tâche est mise en file d'attente ou passe à un statut qui n'est pas final (`IN_PROGRESS` ou `QUEUED`).
+ Une ancienne exécution d'état acquiert le statut final (`FAILED`, `SUCCEEDED`, `CANCELED`, `TIMED_OUT`, `REJECTED` ou `REMOVED`).

Pour plus d'informations sur les limites avec et sans configuration de planification, consultez[Limites d'exécution des tâches](job-limits.md#job-execution-limits).

**NextNotification**
+ Une `NextNotification` contient le résumé d’informations de l’exécution de tâche suivante dans la file d’attente.

  Une `NextNotification` est publiée chaque fois que la première exécution de tâche de la liste change.
  + Une nouvelle exécution de tâche est ajoutée à la liste au statut `QUEUED` et constitue le premier élément de la liste.
  + Le statut d’une exécution de tâche existante qui n’était pas le premier élément de la liste passe de `QUEUED` à `IN_PROGRESS` et devient le premier élément de la liste. (Cette situation se produit lorsque la liste ne contient aucune autre exécution de tâche `IN_PROGRESS` ou que l'exécution de tâche dont le statut passe de `QUEUED` à `IN_PROGRESS` a été mise en file d'attente avant toutes les exécutions de tâche `IN_PROGRESS` de la liste.) 
  + Le statut de l'exécution de tâche qui est la première de la liste passe au statut final et est supprimée de la liste.

Pour plus d'informations sur la publication et l'abonnement aux rubriques MQTT, consultez [Protocoles de communication des appareils](protocols.md).

**Note**  
Les notifications ne sont pas disponibles lorsque vous utilisez HTTP Signature Version 4 ou HTTP TLS pour communiquer avec les tâches.

## Tâche en attente
<a name="jobs-comm-pending"></a>

Le service AWS IoT Jobs publie un message sur un sujet MQTT lorsqu'une tâche est ajoutée ou supprimée de la liste des tâches en attente pour un objet ou lorsque la première exécution de tâche de la liste change :
+ `$aws/things/thingName/jobs/notify`
+ `$aws/things/thingName/jobs/notify-next`

Les messages contiennent les exemples de charge utile suivants :

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

Si l’exécution de la tâche appelée `this-job` provient d’une tâche pour laquelle la configuration de planification facultative est sélectionnée et que le déploiement du document de tâche est prévu pour avoir lieu pendant une fenêtre de maintenance, il n’apparaîtra que pendant une fenêtre de maintenance récurrente. En dehors d’une fenêtre de maintenance, la tâche appelée `this-job` sera exclue de la liste des exécutions de tâches en attente, comme indiqué dans l’exemple suivant.

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

Si l’exécution de la tâche appelée `other-job` provient d’une tâche pour laquelle la configuration de planification facultative est sélectionnée et que le déploiement du document de tâche est prévu pour avoir lieu pendant une fenêtre de maintenance, il n’apparaîtra que pendant une fenêtre de maintenance récurrente. En dehors d’une fenêtre de maintenance, la tâche appelée `other-job` ne sera pas répertoriée comme la prochaine exécution de la tâche, comme indiqué dans l’exemple suivant.

```
{} //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"
```

Les valeurs possibles d'état d'exécution de tâche sont `QUEUED`, `IN_PROGRESS`, `FAILED`, `SUCCEEDED`, `CANCELED`, `TIMED_OUT`, `REJECTED` et `REMOVED`.

La série d’exemples suivante montre les notifications publiées pour chaque rubrique lorsque des exécutions de tâches sont créées et passent d’un état à un autre. 

D'abord, une tâche appelée `job1` est créée. Cette notification est publiée dans la rubrique `jobs/notify` :

```
{
  "timestamp": 1517016948,
  "jobs": {
    "QUEUED": [
      {
        "jobId": "job1",
        "queuedAt": 1517016947,
        "lastUpdatedAt": 1517016947,
        "executionNumber": 1,
        "versionNumber": 1
      }
    ]
  }
}
```

Cette notification est publiée dans la rubrique `jobs/notify-next` :

```
{
  "timestamp": 1517016948,
  "execution": {
    "jobId": "job1",
    "status": "QUEUED",
    "queuedAt": 1517016947,
    "lastUpdatedAt": 1517016947,
    "versionNumber": 1,
    "executionNumber": 1,
    "jobDocument": {
      "operation": "test"
    }
  }
}
```

Lorsqu'une autre tâche (`job2`) est créée, cette notification est publiée dans la rubrique `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
      }
    ]
  }
}
```

Aucune notification n'est pas publiée dans la rubrique `jobs/notify-next`, car la tâche suivante de la file d'attente (`job1`) n'a pas changé. Lorsque `job1` commence à s'exécuter, son statut devient `IN_PROGRESS`. Aucune notification n'est publiée, car la liste des tâches et la tâche suivante dans la file d'attente n'ont pas changé.

Lorsqu'une troisième tâche (`job3`) est ajoutée, cette notification est publiée dans la rubrique `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
      }
    ]
  }
}
```

Aucune notification n'est publiée dans la rubrique `jobs/notify-next`, car la tâche suivante de la file d'attente est toujours `job1`.

Une fois la tâche `job1` terminée, son statut passe à `SUCCEEDED` et cette notification est publiée dans la rubrique `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
      }
    ]
  }
}
```

À ce stade, la tâche `job1` a été supprimée de la file d'attente et la prochaine tâche à s'exécuter est `job2`. Cette notification est publiée dans la rubrique `jobs/notify-next` :

```
{
  "timestamp": 1517186269,
  "execution": {
    "jobId": "job2",
    "status": "QUEUED",
    "queuedAt": 1517017191,
    "lastUpdatedAt": 1517017191,
    "versionNumber": 1,
    "executionNumber": 1,
    "jobDocument": {
      "operation": "test"
    }
  }
}
```

Si la tâche `job3` doit commencer à s'exécuter avant la tâche `job2` (ce qui n'est pas recommandé), le statut de la tâche `job3` peut être modifié pour devenir `IN_PROGRESS`. Dans cette éventualité, `job2` n'est plus la tâche suivante dans la file d'attente et cette notification est publiée dans la rubrique `jobs/notify-next` :

```
{
  "timestamp": 1517186779,
  "execution": {
    "jobId": "job3",
    "status": "IN_PROGRESS",
    "queuedAt": 1517017905,
    "startedAt": 1517186779,
    "lastUpdatedAt": 1517186779,
    "versionNumber": 2,
    "executionNumber": 1,
    "jobDocument": {
      "operation": "test"
    }
  }
}
```

Aucune notification n'est publiée dans la rubrique `jobs/notify`, car aucune tâche n'a été ajoutée ou supprimée.

Si l'appareil rejette la tâche `job2` et met à jour son statut sur `REJECTED`, cette notification est publiée dans la rubrique `jobs/notify` :

```
{
  "timestamp": 1517189392,
  "jobs": {
    "IN_PROGRESS": [
      {
        "jobId": "job3",
        "queuedAt": 1517017905,
        "lastUpdatedAt": 1517186779,
        "startedAt": 1517186779,
        "executionNumber": 1,
        "versionNumber": 2
      }
    ]
  }
}
```

Si la tâche `job3` (toujours en cours) est supprimée de force, cette notification est publiée dans la rubrique `jobs/notify` :

```
{
  "timestamp": 1517189551,
  "jobs": {}
}
```

À ce stade, la file d'attente est vide. Cette notification est publiée dans la rubrique `jobs/notify-next` :

```
{
  "timestamp": 1517189551
}
```