

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Notifiche dei processi
<a name="jobs-comm-notifications"></a>

Il servizio AWS IoT Jobs pubblica messaggi MQTT su argomenti riservati quando i lavori sono in sospeso o quando cambia la prima esecuzione del lavoro nell'elenco. I dispositivi possono monitorare i processi in sospeso iscrivendosi a questi argomenti.

## Tipo di notifica processo
<a name="jobs-comm-notifications-types"></a>

Le notifiche dei processi vengono pubblicate in MQTT come payload JSON. Sono disponibili due tipi di notifiche:

**ListNotification**

`ListNotification` contiene un elenco di un massimo di 15 esecuzioni del processo in sospeso. Sono ordinate in base allo stato (le esecuzioni dei processi `IN_PROGRESS` hanno la precedenza rispetto alle esecuzioni dei processi `QUEUED`), quindi in base al momento in cui sono state messi in coda.

Una notifica `ListNotification` viene pubblicata ogni volta che viene soddisfatto uno dei seguenti criteri.
+ Una nuova esecuzione di un processo è in coda o passa a uno stato non terminale (`IN_PROGRESS` o `QUEUED`).
+ Un'esecuzione precedente di un processo passa a uno stato terminale (`FAILED`, `SUCCEEDED`, `CANCELED`, `TIMED_OUT`, `REJECTED` o `REMOVED`).

Per ulteriori informazioni sui limiti con e senza la configurazione di pianificazione, vedere. [Limiti delle esecuzioni di Job](job-limits.md#job-execution-limits)

**NextNotification**
+ Una `NextNotification` contiene informazioni di riepilogo sull'esecuzione di processo successiva nella coda.

  Una notifica `NextNotification` viene pubblicata ogni volta che la prima esecuzione di un processo nell'elenco cambia.
  + Una nuova esecuzione di un processo viene aggiunta all'elenco come `QUEUED` ed è la prima nell'elenco.
  + Lo stato dell'esecuzione di un processo che non era la prima nell'elenco passa da `QUEUED` a `IN_PROGRESS` e l'esecuzione diventa la prima nell'elenco. Ciò si verifica quando non sono presenti altre esecuzioni di processi `IN_PROGRESS` nell'elenco o quando l'esecuzione del processo il cui stato passa da `QUEUED` a `IN_PROGRESS` era stata messa in coda prima di ogni altra esecuzione di un processo `IN_PROGRESS` nell'elenco. 
  + L'esecuzione del processo prima nell'elenco passa a uno stato terminale e viene rimossa dall'elenco.

Per ulteriori informazioni sulla pubblicazione e sulla sottoscrizione di argomenti MQTT, consulta [Protocolli di dispositivo di comunicazione](protocols.md).

**Nota**  
Quando si utilizza HTTP Signature Version 4 o HTTP TLS per comunicare con i processi, le notifiche non sono disponibili.

## Processo in sospeso
<a name="jobs-comm-pending"></a>

Il servizio AWS IoT Jobs pubblica un messaggio su un argomento MQTT quando un job viene aggiunto o rimosso dall'elenco delle esecuzioni di job in sospeso per un oggetto o quando la prima esecuzione di job nell'elenco cambia:
+ `$aws/things/{{thingName}}/jobs/notify`
+ `$aws/things/{{thingName}}/jobs/notify-next`

I messaggi contengono i payload di esempio seguenti:

`$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 l'esecuzione del processo denominata `this-job` è stata originata da un processo con la configurazione della pianificazione opzionale selezionata e la distribuzione del documento del processo pianificata per essere eseguita durante una finestra di manutenzione, verrà visualizzata solo durante una finestra di manutenzione ricorrente. Al di fuori di una finestra di manutenzione, il processo denominato `this-job` verrà escluso dall'elenco delle esecuzioni del processo in sospeso, come illustrato nell’esempio seguente.

```
{
  "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 l'esecuzione del processo denominata `other-job` è stata originata da un processo con la configurazione della pianificazione opzionale selezionata e la distribuzione del documento del processo pianificata per essere eseguita durante una finestra di manutenzione, verrà visualizzata solo durante una finestra di manutenzione ricorrente. Al di fuori di una finestra di manutenzione, il processo denominato `other-job` non verrà elencato come l’esecuzione del processo successivo, come illustrato nell’esempio seguente.

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

Possibili valori di stato dell'esecuzione del processo sono `QUEUED`, `IN_PROGRESS`, `FAILED`, `SUCCEEDED`, `CANCELED`, `TIMED_OUT`, `REJECTED` e `REMOVED`.

La serie di esempi riportata di seguito mostra le notifiche che vengono pubblicate in ciascun argomento quando le esecuzioni dei processi vengono create e passano da uno stato all'altro. 

Per prima cosa, viene creato un processo chiamato `job1`. Questa notifica viene pubblicata nell'argomento `jobs/notify`:

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

Questa notifica viene pubblicata nell'argomento `jobs/notify-next`:

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

Quando viene creato un altro processo (`job2`), questa notifica viene pubblicata nell'argomento `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
      }
    ]
  }
}
```

Una notifica non viene pubblicata nell'argomento `jobs/notify-next` poiché il processo successivo nella coda (`job1`) non è cambiato. Quando inizia l'esecuzione di `job1`, passa allo stato `IN_PROGRESS`. Non vengono pubblicate notifiche perché l'elenco dei processi e il processo successivo in coda non sono cambiati.

Quando viene aggiunto un terzo processo (`job3`), questa notifica viene pubblicata nell'argomento `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
      }
    ]
  }
}
```

Una notifica non viene pubblicata nell'argomento `jobs/notify-next` poiché il processo successivo nella coda è ancora `job1`.

Quando `job1` viene completato, passa allo stato `SUCCEEDED` e questa notifica viene pubblicata nell'argomento `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 questo punto, `job1` è stato rimosso dalla coda e il processo successivo da eseguire è `job2`. Questa notifica viene pubblicata nell'argomento `jobs/notify-next`:

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

Se `job3` deve essere eseguito prima di `job2` (operazione non consigliata), è possibile modificare lo stato di `job3` in `IN_PROGRESS`. In questo caso, `job2` non è più il successivo processo in coda e questa notifica viene pubblicata sull'argomento `jobs/notify-next`:

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

Non vengono pubblicate notifiche nell'argomento `jobs/notify` perché non sono stati aggiunti o rimossi processi.

Se il dispositivo respinge `job2` e aggiorna lo stato in `REJECTED`, questa notifica viene pubblicata sull'argomento `jobs/notify`:

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

Se `job3` (che è ancora in corso) viene eliminato in modo forzato, questa notifica viene pubblicata sull'argomento `jobs/notify`:

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

A questo punto, la coda è vuota. Questa notifica viene pubblicata nell'argomento `jobs/notify-next`:

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