Notifiche dei processi - AWS IoT Core

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

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

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

Notifica dell'elenco (fino a 15 esecuzioni del processo in sospeso con stato QUEUED o IN_PROGRESS)

Senza configurazione della pianificazione opzionale e finestra di manutenzione ricorrente

(Fino a 10 esecuzioni del processo)

Con configurazione della pianificazione opzionale e finestra di manutenzione ricorrente

(Fino a 5 esecuzioni del processo)

Appare sempre in. ListNotification

Viene visualizzato solo ListNotification durante una finestra di manutenzione.

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.

Nota

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

Processo in sospeso

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 }