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/
– Um cliente se conectou apenas ao agente de mensagens.clientId
-
$aws/events/presence/disconnected/
– Um cliente se desconectou do agente de mensagens.clientId
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 ouClose 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
oudisconnected
. - 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/
e clientId
$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
ouunsubscribed
. - 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.