

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
<a name="life-cycle-events"></a>

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.  
`thingName` só será incluído se o cliente estiver se conectando usando o recurso de [coisa exclusiva](exclusive-thing.md).

**Topics**
+ [Connect/Disconnect eventos](#connect-disconnect)
+ [Evento de falha na tentativa de conexão](#connect-authfailure-event)
+ [Subscribe/Unsubscribe eventos](#subscribe-unsubscribe-events)

## Connect/Disconnect eventos
<a name="connect-disconnect"></a>

**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 coisas. Connect/Disconnect Para obter mais informações, consulte [Indexação de frota](https://docs.aws.amazon.com//iot/latest/developerguide/iot-indexing.html).

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 dos elementos JSON contidos nas connection/disconnection mensagens publicadas no `$aws/events/presence/connected/{{clientId}}` tópico.

**clientId**  
O ID do cliente que se conecta ou que se desconecta.  
Os IDs de clientes que contêm \# ou \+ não recebem eventos de ciclo de vida.

**thingName**  
O nome da sua coisa da IoT. `thingName` só será incluído se o cliente estiver se conectando usando o recurso de [coisa exclusiva](exclusive-thing.md).

**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)](mqtt.md#mqtt-lwt) quando a desconexão ocorrer.      
[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/iot/latest/developerguide/life-cycle-events.html)
1Se o dispositivo tiver uma conexão ativa antes de receber esse erro.  
2 Para evitar mensagens Last Will and Testament (LWT), configure `preventWillMessage=true` para substituir o comportamento de envio de LWT padrão da API `DeleteConnection`.

**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.  
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 como 0 depois que um cliente tiver permanecido desconectado por mais tempo do que o tempo de vida (TTL) configurado para a sessão persistente.

Uma mensagem de conexão tem a seguinte estrutura.

```
{
    "clientId": "186b5",
    "thingName": "exampleThing",
    "timestamp": 1573002230757,
    "eventType": "connected",
    "sessionIdentifier": "00000000-0000-0000-0000-000000000000",
    "principalIdentifier": "12345678901234567890123456789012",
    "ipAddress": "192.0.2.0",
    "versionNumber": 0
}
```

Uma mensagem de desconexão tem a seguinte estrutura.

```
{
    "clientId": "186b5",
    "thingName": "exampleThing",
    "timestamp": 1573002340451,
    "eventType": "disconnected",
    "sessionIdentifier": "00000000-0000-0000-0000-000000000000",
    "principalIdentifier": "12345678901234567890123456789012",
    "clientInitiatedDisconnect": true,
    "disconnectReason": "CLIENT_INITIATED_DISCONNECT",
    "versionNumber": 0
}
```

### Gerenciamento de desconexões de clientes
<a name="reconnect"></a>

A prática recomendada é sempre ter um estado de espera implementado para eventos de ciclo de vida, incluindo mensagens [Last Will and Testament (LWT)](mqtt.md). 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](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-delay-queues.html). 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.

## Evento de falha na tentativa de conexão
<a name="connect-authfailure-event"></a>

AWS IoT publica uma mensagem no seguinte tópico do MQTT quando um cliente não está autorizado a se conectar ou quando um último testamento e testamento são configurados e o cliente não está autorizado a publicar nesse tópico do último testamento.

```
$aws/events/presence/connect_failed/{{clientId}}
```

Veja a seguir uma lista de elementos JSON contidos nas mensagens de autorização de conexão publicadas no tópico `$aws/events/presence/connect_failed/{{clientId}}`.

**clientId**  
O ID do cliente que tentou, mas não conseguiu se conectar.  
Os IDs de clientes que contêm \# ou \+ não recebem eventos de ciclo de vida.

**thingName**  
O nome da sua coisa da IoT. `thingName` só será incluído se o cliente estiver se conectando usando o recurso de [coisa exclusiva](exclusive-thing.md).

**timestamp**  
Uma estimativa de quando o evento ocorreu.

**eventType**  
O tipo de evento. O valor válido é `connect_failed`.

**conectar FailureReason**  
A razão pela qual a conexão falha. O valor válido é `AUTHORIZATION_FAILED`.

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

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

Uma mensagem de falha de conexão tem a estrutura a seguir.

```
{
    "clientId": "186b5",
    "thingName": "exampleThing",
    "timestamp": 1460065214626,
    "eventType": "connect_failed",
    "connectFailureReason": "AUTHORIZATION_FAILED",
    "principalIdentifier": "12345678901234567890123456789012",
    "sessionIdentifier": "00000000-0000-0000-0000-000000000000",
    "ipAddress" : "192.0.2.0"
}
```

## Subscribe/Unsubscribe eventos
<a name="subscribe-unsubscribe-events"></a>

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}}
```

 or 

```
$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",
    "thingName": "exampleThing",
    "timestamp": 1460065214626,
    "eventType": "subscribed" | "unsubscribed",
    "sessionIdentifier": "00000000-0000-0000-0000-000000000000",
    "principalIdentifier": "12345678901234567890123456789012",
    "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.  
Os IDs de clientes que contêm \# ou \+ não recebem eventos de ciclo de vida.

thingName  
O nome da sua coisa da IoT. `thingName` só será incluído se o cliente estiver se conectando usando o recurso de [coisa exclusiva](exclusive-thing.md).

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.