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.
Eventos del ciclo de vida
AWS IoT puede publicar eventos del ciclo de vida sobre los temas de MQTT. Estos eventos están disponibles de forma predeterminada y no se pueden desactivar.
nota
Es posible que los mensajes de ciclo de vida se envíen de forma desordenada. Puede que reciba mensajes duplicados.
Eventos de conexión/desconexión
nota
Con la indexación de flotas de AWS IoT Device Management, puede buscar cosas, ejecutar consultas agregadas y crear grupos dinámicos basados en los eventos de conexión o desconexión de cosas. Para obtener más información, consulte Indexación de flotas.
AWS IoT publica un mensaje sobre los siguientes temas de MQTT cuando un cliente se conecta o se desconecta:
-
$aws/events/presence/connected/
: un cliente se ha conectado al agente de mensajes.clientId
-
$aws/events/presence/disconnected/
: un cliente se ha desconectado del agente de mensajes.clientId
A continuación, se muestra una lista de elementos JSON que se encuentran en los mensajes de conexión/desconexión publicados en el tema $aws/events/presence/connected/
.clientId
- clientId
-
El ID del cliente que se conecta o se desconecta.
nota
Los ID de cliente que contienen los símbolos # o + no recibirán eventos del ciclo de vida.
- cliente InitiatedDisconnect
-
True si el cliente inició la desconexión. De lo contrario, devuelve false. Sólo se encuentra en mensajes de desconexión.
- disconnectReason
-
La razón por la que el cliente se está desconectando. Sólo se encuentra en mensajes de desconexión. La siguiente tabla contiene valores válidos e indica si el agente de mensajes enviará mensajes Last Will and Testament (LWT) cuando se produzca la desconexión.
Motivo de desconexión Descripción El agente de mensajes enviará los mensajes LWT AUTH_ERROR
El cliente no pudo autenticarse o la autorización devolvió un error. Sí. Si el dispositivo tiene una conexión activa antes de recibir este error. CLIENT_INITIATED_DISCONNECT
El cliente indica que se desconectará. El cliente puede hacerlo enviando un paquete de DISCONNECT
control MQTT o un paqueteClose frame
si el cliente utiliza una WebSocket conexión.No. CLIENT_ERROR
El cliente hizo algo mal que provocó su desconexión. Por ejemplo, un cliente se desconectará por enviar más de un paquete CONNECT
de MQTT en la misma conexión o si el cliente intenta publicar con una carga útil que supera el límite de carga útil.Sí. CONNECTION_LOST
La conexión cliente-servidor está cortada. Esto puede ocurrir durante un período de alta latencia de red o cuando se pierde la conexión a Internet. Sí. DUPLICATE_CLIENTID
El cliente está utilizando un ID de cliente que ya está en uso. En este caso, el cliente que ya está conectado se desconectará con esta razón de desconexión. Sí. FORBIDDEN_ACCESS
No se permite la conexión del cliente. Por ejemplo, un cliente con una dirección IP denegada no podrá conectarse. Sí. Si el dispositivo tiene una conexión activa antes de recibir este error. MQTT_KEEP_ALIVE_TIMEOUT
Si no hay comunicación cliente-servidor para 1,5 veces el tiempo de mantenimiento del cliente, el cliente se desconecta. Sí. SERVER_ERROR
Desconectado debido a problemas inesperados del servidor. Sí. SERVER_INITIATED_DISCONNECT
El servidor desconecta de forma intencionada un cliente por razones operativas. Sí. THROTTLED
El cliente se desconecta por exceder una limitación controlada. Sí. WEBSOCKET_TTL_EXPIRATION
El cliente está desconectado porque a WebSocket lleva más tiempo conectado que su time-to-live valor. Sí. CUSTOMAUTH_TTL_EXPIRATION
El cliente está desconectado porque lleva más tiempo conectado que el time-to-live valor de su autorizador personalizado. Sí. - eventType
-
El tipo de evento. Los valores válidos son
connected
odisconnected
. - ipAddress
-
La dirección IP del cliente que se conecta. Puede estar en formato IPv4 o IPv6. Sólo se encuentra en los mensajes de conexión.
- principalIdentifier
-
Las credenciales que se utilizan para la autenticación. En el caso de los certificados de autenticación mutua de TLS, se trata del ID de certificado. En cuanto a las demás conexiones, se trata de las credenciales de IAM.
- sessionIdentifier
-
Un identificador único a nivel mundial AWS IoT que existe durante toda la sesión.
- Marca de tiempo
-
Una aproximación de cuándo se produjo el evento.
- versionNumber
-
El número de versión del evento del ciclo de vida. Se trata de un valor entero largo que aumenta de forma monótona para cada conexión de un ID de cliente. El número de versión puede utilizarlo un suscriptor para deducir el orden de los eventos del ciclo de vida.
nota
Los mensajes de conexión y desconexión de una conexión de cliente tienen el mismo número de versión.
El número de versión podría saltarse algunos valores y no se garantiza que se vaya a incrementar de forma coherente en 1 para cada evento.
Si un cliente no se conecta durante aproximadamente una hora, el número de versión se restablece a 0. En el caso de las sesiones persistentes, el número de versión se restablece a 0 después de que un cliente haya estado desconectado durante más tiempo que el tiempo configurado time-to-live (TTL) para la sesión persistente.
Un mensaje de conexión tiene la siguiente estructura.
{ "clientId": "186b5", "timestamp": 1573002230757, "eventType": "connected", "sessionIdentifier": "a4666d2a7d844ae4ac5d7b38c9cb7967", "principalIdentifier": "12345678901234567890123456789012", "ipAddress": "192.0.2.0", "versionNumber": 0 }
Un mensaje de desconexión tiene la siguiente estructura.
{ "clientId": "186b5", "timestamp": 1573002340451, "eventType": "disconnected", "sessionIdentifier": "a4666d2a7d844ae4ac5d7b38c9cb7967", "principalIdentifier": "12345678901234567890123456789012", "clientInitiatedDisconnect": true, "disconnectReason": "CLIENT_INITIATED_DISCONNECT", "versionNumber": 0 }
Gestión de desconexiones del cliente
La práctica recomendada consiste siempre en tener implementado un estado de espera para los eventos del ciclo de vida, incluidos los mensajes Last Will and Testament (LWT). Cuando se recibe un mensaje de desconexión, el código debe esperar un periodo de tiempo y verificar que un dispositivo sigue sin conexión antes de tomar cualquier medida. Una forma de hacerlo consiste en utilizar colas con retraso de SQS. Cuando un cliente recibe un evento de ciclo de vida o un mensaje LWT, se puede poner en cola un mensaje (por ejemplo, durante 5 segundos). Cuando dicho mensaje está disponible y se procesa (por parte de Lambda u otro servicio), primero se puede comprobar si el dispositivo sigue sin conexión antes de tomar otras medidas.
Eventos de suscripción/cancelación de suscripción
AWS IoT publica un mensaje en el siguiente tema de MQTT cuando un cliente se suscribe o cancela la suscripción a un tema de MQTT:
$aws/events/subscriptions/subscribed/
clientId
o
$aws/events/subscriptions/unsubscribed/
clientId
Donde clientId
es el ID de cliente MQTT que se conecta con el agente de mensajes de AWS IoT
.
El mensaje publicado en este tema tiene la estructura siguiente:
{ "clientId": "186b5", "timestamp": 1460065214626, "eventType": "subscribed" | "unsubscribed", "sessionIdentifier": "00000000-0000-0000-0000-000000000000", "principalIdentifier": "000000000000/ABCDEFGHIJKLMNOPQRSTU:some-user/ABCDEFGHIJKLMNOPQRSTU:some-user", "topics" : ["foo/bar","device/data","dog/cat"] }
A continuación, se ofrece una lista de elementos JSON que se encuentran en los mensajes suscritos y no suscritos publicados en los temas $aws/events/subscriptions/subscribed/
y clientId
$aws/events/subscriptions/unsubscribed/
.clientId
- clientId
-
El ID del cliente que se suscribe o cancela su suscripción.
nota
Los ID de cliente que contienen los símbolos # o + no recibirán eventos del ciclo de vida.
- eventType
-
El tipo de evento. Los valores válidos son
subscribed
ounsubscribed
. - principalIdentifier
-
Las credenciales que se utilizan para la autenticación. En el caso de los certificados de autenticación mutua de TLS, se trata del ID de certificado. En cuanto a las demás conexiones, se trata de las credenciales de IAM.
- sessionIdentifier
-
Un identificador único a nivel mundial AWS IoT que existe durante toda la sesión.
- Marca de tiempo
-
Una aproximación de cuándo se produjo el evento.
- temas
-
Una matriz de los temas MQTT a los que se ha suscrito el cliente.
nota
Es posible que los mensajes de ciclo de vida se envíen de forma desordenada. Puede que reciba mensajes duplicados.