Eventos de ciclo de vida - AWS IoT Core

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Eventos de ciclo de vida

AWS IoT pode publicar eventos do ciclo de vida sobre os tópicos do MQTT. Esses eventos estão disponíveis por padrão e não podem ser desativados.

nota

As mensagens de ciclo de vida podem ser enviadas fora de ordem. Você pode receber mensagens duplicadas.

Eventos de conexão/desconexão

nota

Com a indexação de frotas do AWS IoT Device Management, você pode pesquisar coisas, executar consultas agregadas e criar grupos dinâmicos com base em eventos de conexão/desconexão de itens. Para obter mais informações, consulte Indexação de frota.

AWS IoT publica uma mensagem nos seguintes tópicos do MQTT quando um cliente se conecta ou desconecta:

  • $aws/events/presence/connected/clientId – Um cliente se conectou apenas ao agente de mensagens.

  • $aws/events/presence/disconnected/clientId – Um cliente se desconectou do agente de mensagens.

Veja a seguir uma lista de elementos JSON contidos nas mensagens de conexão/desconexão publicadas no tópico $aws/events/presence/connected/clientId.

clientId

O ID do cliente que se conecta ou que se desconecta.

nota

Os IDs de clientes que contêm # ou + não recebem eventos de ciclo de vida.

cliente InitiatedDisconnect

Verdadeiro se o cliente iniciou a desconexão. Caso contrário, falso. Encontrado apenas em mensagens de desconexão.

disconnectReason

A razão pela qual o cliente está se desconectando. Encontrado apenas em mensagens de desconexão. A tabela a seguir contém valores válidos e se o agente enviará mensagens Last Will and Testament (LWT) quando a desconexão ocorrer.

Motivo da desconexão Descrição O agente enviará as mensagens LWT
AUTH_ERROR Falha ao autenticar o cliente, ou a autorização falhou. Sim. Se o dispositivo tiver uma conexão ativa antes de receber esse erro.
CLIENT_INITIATED_DISCONNECT O cliente indica que ele se desconectará. O cliente pode fazer isso enviando um pacote de DISCONNECT controle MQTT ou Close frame se o cliente estiver usando uma WebSocket conexão. Não.
CLIENT_ERROR O cliente fez algo errado que faz com que ele se desconecte. Por exemplo, um cliente será desconectado para enviar mais de 1 pacote CONNECT MQTT na mesma conexão ou se o cliente tentar publicar com uma carga útil que exceda o limite de carga útil. Sim.
CONNECTION_LOST A conexão cliente-servidor é cortada. Isso pode acontecer durante um período de alta latência de rede ou quando a conexão com a Internet é perdida. Sim.
DUPLICATE_CLIENTID O cliente está usando um ID de cliente que já está em uso. Nesse caso, o cliente que já está conectado será desconectado com esse motivo de desconexão. Sim.
FORBIDDEN_ACCESS O cliente não tem permissão para ser conectado. Por exemplo, um cliente com um endereço IP negado falhará ao se conectar. Sim. Se o dispositivo tiver uma conexão ativa antes de receber esse erro.
MQTT_KEEP_ALIVE_TIMEOUT Se não houver nenhuma comunicação cliente-servidor para 1,5x do tempo keep-alive do cliente, o cliente será desconectado. Sim.
SERVER_ERROR Desconectado devido a problemas inesperados no servidor. Sim.
SERVER_INITIATED_DISCONNECT O servidor desconecta intencionalmente um cliente por razões operacionais. Sim.
THROTTLED O cliente é desconectado por exceder um limite de controle. Sim.
WEBSOCKET_TTL_EXPIRATION O cliente está desconectado porque a está conectado WebSocket há mais tempo do que seu time-to-live valor. Sim.
CUSTOMAUTH_TTL_EXPIRATION O cliente está desconectado porque está conectado há mais tempo do que o time-to-live valor de seu autorizador personalizado. Sim.
eventType

O tipo de evento. Os valores válidos são connected ou disconnected.

ipAddress

O endereço IP do cliente que está se conectando. Pode ser no formato IPv4 ou IPv6. Encontrado somente em mensagens de conexão.

principalIdentifier

A credencial usada para autenticar. Para certificados de autenticação mútua TLS, a credencial é o ID do certificado. Para outras conexões, são as credenciais do IAM.

sessionIdentifier

Um identificador globalmente exclusivo AWS IoT que existe durante toda a sessão.

timestamp

Uma estimativa de quando o evento ocorreu.

versionNumber

O número de versão para o evento de ciclo de vida. Esse é um valor inteiro longo que cresce monotonicamente para cada conexão do ID do cliente. O número da versão pode ser usado por um assinante para inferir a ordem dos eventos de ciclo de vida.

nota

As mensagens de conexão e desconexão para uma conexão do cliente têm o mesmo número de versão.

O número da versão pode ignorar valores e não há garantia de que ele aumente de forma consistente em 1 para cada evento.

Se um cliente não permanecer conectado por aproximadamente uma hora, o número da versão será redefinido como 0. Para sessões persistentes, o número da versão é redefinido para 0 após um cliente ter sido desconectado por mais tempo do que o configurado time-to-live (TTL) para a sessão persistente.

Uma mensagem de conexão tem a seguinte estrutura.

{ "clientId": "186b5", "timestamp": 1573002230757, "eventType": "connected", "sessionIdentifier": "a4666d2a7d844ae4ac5d7b38c9cb7967", "principalIdentifier": "12345678901234567890123456789012", "ipAddress": "192.0.2.0", "versionNumber": 0 }

Uma mensagem de desconexão tem a seguinte estrutura.

{ "clientId": "186b5", "timestamp": 1573002340451, "eventType": "disconnected", "sessionIdentifier": "a4666d2a7d844ae4ac5d7b38c9cb7967", "principalIdentifier": "12345678901234567890123456789012", "clientInitiatedDisconnect": true, "disconnectReason": "CLIENT_INITIATED_DISCONNECT", "versionNumber": 0 }

Gerenciamento de desconexões de clientes

A prática recomendada é sempre ter um estado de espera implementado para eventos de ciclo de vida, incluindo mensagens Last Will and Testament (LWT). Quando uma mensagem de desconexão é recebida, seu código deve aguardar um período e verificar se um dispositivo ainda está offline antes de realizar uma ação. Uma forma de fazer isso é usando Filas de atraso do SQS. Quando um cliente recebe um evento LWT ou de ciclo de vida, você pode colocar uma mensagem na fila (por exemplo, por 5 segundos). Quando essa mensagem se torna disponível e é processada (pelo Lambda ou outro serviço), você pode primeiro verificar se o dispositivo ainda está off-line antes de realizar outras ações.

Eventos de assinatura/cancelamento de assinatura

AWS IoT publica uma mensagem no seguinte tópico do MQTT quando um cliente se inscreve ou cancela a assinatura de um tópico do MQTT:

$aws/events/subscriptions/subscribed/clientId

ou

$aws/events/subscriptions/unsubscribed/clientId

Onde clientId é o ID do cliente MQTT que se conecta ao agente de mensagens da AWS IoT .

A mensagem publicada para este tópico tem a seguinte estrutura:

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

Veja a seguir uma lista de elementos JSON que estão contidos nas mensagens assinadas e não assinadas publicadas nos tópicos $aws/events/subscriptions/subscribed/clientId e $aws/events/subscriptions/unsubscribed/clientId.

clientId

O ID do cliente que assina ou que cancela a assinatura.

nota

Os IDs de clientes que contêm # ou + não recebem eventos de ciclo de vida.

eventType

O tipo de evento. Os valores válidos são subscribed ou unsubscribed.

principalIdentifier

A credencial usada para autenticar. Para certificados de autenticação mútua TLS, a credencial é o ID do certificado. Para outras conexões, são as credenciais do IAM.

sessionIdentifier

Um identificador globalmente exclusivo AWS IoT que existe durante toda a sessão.

timestamp

Uma estimativa de quando o evento ocorreu.

tópicos

Uma série de tópicos MQTT nos quais o cliente se inscreveu.

nota

As mensagens de ciclo de vida podem ser enviadas fora de ordem. Você pode receber mensagens duplicadas.