Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Notificaciones de trabajos
El servicio AWS IoT Jobs publica mensajes MQTT en temas reservados cuando hay trabajos pendientes o cuando cambia la primera ejecución de un trabajo de la lista. Los dispositivos pueden realizar un seguimiento de los trabajos pendientes suscribiéndose a estos temas.
Tipos de notificaciones de trabajo
Las notificaciones de trabajo se publican en temas MQTT como cargas JSON. Existen dos tipos de notificaciones:
ListNotification
Una ListNotification
contiene una lista de no más de 15 ejecuciones de trabajos pendientes. Se almacenan por estado (ejecuciones de trabajo IN_PROGRESS
antes que las ejecuciones de trabajo QUEUED
) y, a continuación, por las veces que se incluyeron en la cola.
Una ListNotification
se publica siempre que se cumple uno de los siguientes criterios.
-
Se pone en cola una nueva ejecución de trabajo o se cambia a un estado no terminal (
IN_PROGRESS
oQUEUED
). -
Una ejecución de trabajo antigua cambia a un estado terminal (
FAILED
,SUCCEEDED
,CANCELED
,TIMED_OUT
,REJECTED
oREMOVED
).
Notificación de lista (hasta 15 ejecuciones de trabajos pendientes en QUEUED o IN_PROGRESS ) |
|
---|---|
Sin configuración de programación opcional ni periodo de mantenimiento periódico (Hasta 10 ejecuciones de trabajos) |
Con configuración de programación opcional y periodo de mantenimiento periódico (Hasta 5 ejecuciones de trabajos) |
Aparece siempre en. ListNotification |
Solo aparece en el ListNotification período de mantenimiento. |
NextNotification
-
NextNotification
contiene información resumida sobre la ejecución del trabajo siguiente en la cola.Se publica una
NextNotification
siempre que cambia la ejecución del primer trabajo de la lista.-
Se añade a la lista una nueva ejecución del trabajo como
QUEUED
y se coloca el primero en la lista. -
El estado de la ejecución de un trabajo existente que no estaba en el primer lugar en la lista cambia de
QUEUED
aIN_PROGRESS
y pasa a colocarse en primer lugar en la lista. (Esto sucede cuando no hay otras ejecuciones de trabajos deIN_PROGRESS
en la lista o cuando la ejecución del trabajo cuyo estado cambia deQUEUED
aIN_PROGRESS
estaba en la cola antes que cualquier otra ejecución de trabajo deIN_PROGRESS
de la lista.) -
El estado de la ejecución del trabajo existente que se encuentra en el primer lugar de la lista cambia a un estado terminal y se quita de la lista.
-
Para obtener más información acerca de cómo publicar en temas de MQTT y suscribirse a ellos, consulte Protocolos de comunicación de dispositivos.
nota
Las notificaciones no están disponibles cuando se usa HTTP Signature Version 4 o HTTP TLS para comunicarse con trabajos.
Trabajo pendiente
El servicio AWS IoT Jobs publica un mensaje sobre un tema de MQTT cuando se añade o elimina un trabajo de la lista de ejecuciones pendientes de un objeto o cuando cambia la primera ejecución de un trabajo de la lista:
-
$aws/things/
thingName
/jobs/notify -
$aws/things/
thingName
/jobs/notify-next
Los mensajes contienen las siguientes cargas de ejemplo:
$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 la ejecución del trabajo llamado this-job
se originó en un trabajo con la configuración de programación opcional seleccionada y el despliegue del documento de trabajo está programado para realizarse durante un periodo de mantenimiento, solo aparecerá durante un periodo de mantenimiento periódico. Fuera del periodo de mantenimiento, el trabajo llamado this-job
quedará excluido de la lista de ejecuciones de trabajos pendientes, como se muestra en el siguiente ejemplo.
{ "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 la ejecución del trabajo llamado other-job
se originó en un trabajo con la configuración de programación opcional seleccionada y el despliegue del documento de trabajo está programado para realizarse durante un periodo de mantenimiento, solo aparecerá durante un periodo de mantenimiento periódico. Fuera de un periodo de mantenimiento, el trabajo llamado other-job
no figurará como la siguiente ejecución de trabajo, como se muestra en el siguiente ejemplo.
{} //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"
Los valores del estado de ejecución de trabajo posibles son QUEUED
, IN_PROGRESS
, FAILED
, SUCCEEDED
, CANCELED
, TIMED_OUT
, REJECTED
y REMOVED
.
La siguiente serie de ejemplos muestra las notificaciones publicadas en cada tema a medida que se crean las ejecuciones de trabajo y cambian de un estado a otro.
En primer lugar se crea un trabajo llamado job1
. La notificación se publica en el tema jobs/notify
:
{ "timestamp": 1517016948, "jobs": { "QUEUED": [ { "jobId": "job1", "queuedAt": 1517016947, "lastUpdatedAt": 1517016947, "executionNumber": 1, "versionNumber": 1 } ] } }
La notificación se publica en el tema jobs/notify-next
:
{ "timestamp": 1517016948, "execution": { "jobId": "job1", "status": "QUEUED", "queuedAt": 1517016947, "lastUpdatedAt": 1517016947, "versionNumber": 1, "executionNumber": 1, "jobDocument": { "operation": "test" } } }
Cuando se crea otro trabajo (job2
), esta notificación se publica en el tema 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 } ] } }
No se publica una notificación en el tema jobs/notify-next
porque el siguiente trabajo de la cola (job1
) no ha cambiado. Cuando job1
comienza a ejecutarse, su estado cambia a IN_PROGRESS
. No se publican notificaciones ya que la lista de trabajos y el siguiente trabajo en la cola no han cambiado.
Cuando se añade un tercer trabajo (job3
), esta notificación se publica en el tema 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 } ] } }
No se publica una notificación en el tema jobs/notify-next
porque el siguiente trabajo en la cola sigue siendo job1
.
Cuando job1
finaliza, su estado cambia a SUCCEEDED
y se publica esta notificación en el tema 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 } ] } }
En este punto, job1
se ha eliminado de la cola y el siguiente trabajo que ejecutar es job2
. La notificación se publica en el tema jobs/notify-next
:
{ "timestamp": 1517186269, "execution": { "jobId": "job2", "status": "QUEUED", "queuedAt": 1517017191, "lastUpdatedAt": 1517017191, "versionNumber": 1, "executionNumber": 1, "jobDocument": { "operation": "test" } } }
Si job3
tiene que empezar a ejecutarse antes que job2
(lo cual no se recomienda), el estado de job3
puede cambiarse a IN_PROGRESS
. Si esto sucede, job2
deja de ser el siguiente en la cola y se publica esta notificación en el tema jobs/notify-next
:
{ "timestamp": 1517186779, "execution": { "jobId": "job3", "status": "IN_PROGRESS", "queuedAt": 1517017905, "startedAt": 1517186779, "lastUpdatedAt": 1517186779, "versionNumber": 2, "executionNumber": 1, "jobDocument": { "operation": "test" } } }
No se publica ninguna notificación en el tema jobs/notify
, dado que no se ha añadido o eliminado ningún trabajo.
Si el dispositivo rechaza job2
y actualiza su estado a REJECTED
, se publica esta notificación en el tema jobs/notify
:
{ "timestamp": 1517189392, "jobs": { "IN_PROGRESS": [ { "jobId": "job3", "queuedAt": 1517017905, "lastUpdatedAt": 1517186779, "startedAt": 1517186779, "executionNumber": 1, "versionNumber": 2 } ] } }
Si job3
(que aún está en curso) se elimina de forma forzada, esta notificación se publica en el tema jobs/notify
:
{ "timestamp": 1517189551, "jobs": {} }
En este momento, la cola está vacía. La notificación se publica en el tema jobs/notify-next
:
{ "timestamp": 1517189551 }