

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

# Como a solução funciona
<a name="how-the-solution-works"></a>

 Esta seção descreve as etapas em um fluxo de trabalho de sala de espera AWS virtual em alto nível. Consulte o [Guia do desenvolvedor em GitHub](https://github.com/aws-solutions/aws-virtual-waiting-room/blob/main/docs/developer-guide.md) para obter detalhes sobre como criar, personalizar e integrar uma sala de espera para seu site. 

 A API pública da sala de espera pode estar localizada atrás da segurança do perímetro do seu site ou pode estar disponível sem qualquer autorização. Dependendo da abordagem usada para integrar a sala de espera ao site, talvez seja necessário que o usuário primeiro se autentique no site antes de poder navegar até a sala de espera e obter uma posição na fila. 

 O software cliente deve ter a ID do evento para entrar na sala de espera e fazer outras solicitações. Uma ID de evento é uma ID exclusiva necessária para a maioria das solicitações públicas e privadas APIs. O ID do evento é definido durante a instalação da pilha principal da API. Durante a operação, o ID do evento pode ser fornecido como um parâmetro de URL ou cookie por meio da página da sala de espera; ele pode ser fornecido como parte das declarações do token de autenticação ou pode ser distribuído aos clientes por meio de um caminho de dados diferente. 

 Há casos em que o cliente precisa do ID do evento e do ID da solicitação para fazer determinadas chamadas de API. O ID da solicitação é um ID exclusivo emitido pela sala de espera que representa um cliente específico na fila. 

 As etapas a seguir descrevem o fluxo de solicitações de API para entrar na fila, aguardar o progresso da fila e sair da sala de espera com um token de acesso para o site. 

 **O usuário entra na sala de espera:**

1.  O usuário recebe uma tela ou página que representa o ponto de entrada da sala de espera. Eles optam por entrar na fila e o software cliente (navegador, celular, dispositivo) chama a API `assign_queue_num` pública para solicitar uma posição na fila. 

1.  A solicitação de API é entregue imediatamente à fila do Amazon SQS pelo API Gateway. 

1.  A chamada `assign_queue_num` da API retorna quando a solicitação é colocada na fila. O cliente recebe um ID de solicitação exclusivo que pode ser usado posteriormente para recuperar a posição da fila, a hora da solicitação e um token de acesso. 

1.  A função `AssignQueueNum` Lambda recebe lotes de até dez solicitações da fila SQS. O serviço Lambda distribui invocações para processar vários lotes de solicitações. 

1.  A função `AssignQueueNum` Lambda valida cada mensagem em seu lote, incrementa o contador de filas no Elasticache (Redis OSS) e armazena cada solicitação no Elasticache (Redis OSS) com sua posição de fila associada. 

1.  Cada mensagem é excluída quando processada com sucesso. As mensagens envolvidas em uma condição de erro são reprocessadas uma vez em um lote posterior. Após uma segunda falha, eles são enviados para um dead-letter-queue conectado a um [CloudWatchalarme](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html). 

1.  O cliente pode começar a pesquisar a `queue_num` API depois de receber o ID da solicitação da `assign_queue_num` chamada. O cliente envia a ID do evento e a ID da solicitação para a `queue_num` API e recebe uma posição numérica na fila ou uma resposta indicando que a solicitação ainda não foi processada. Talvez o cliente precise fazer essa ligação mais de uma vez durante grandes eventos. A função `GetQueueNum` Lambda é invocada pelo API Gateway e retorna a posição numérica do cliente na fila do DynamoDB. 

**O usuário espera na sala de espera:**

1.  Depois que o cliente tiver sua posição na fila, ele poderá começar a pesquisar a `serving_num` API em intervalos regulares. A `serving_num` API é chamada com o ID do evento e retorna a posição atual de atendimento da fila. A resposta da `serving_num` API informa ao cliente quando ele pode passar da sala de espera para o local de destino real, onde a transação final pode ocorrer. A função `GetServingNum` Lambda retorna a posição de serviço atual da sala de espera. 

1.  Quando a posição de serviço é igual ou maior que a posição na fila (solicitação) do cliente, o cliente pode solicitar um JSON Web Token (JWT) da API pública. O token pode ser usado com o site de destino para finalizar a transação. A `generate_token` API é chamada com o ID do evento e o ID da solicitação. O API Gateway invoca a função `GenerateToken` Lambda com os parâmetros. 

1.  A função `GenerateToken` Lambda valida a solicitação e verifica se esse token foi gerado anteriormente. A função Lambda consulta a tabela do DynamoDB em busca de um token correspondente. Se encontrado, esse token é retornado ao chamador e não é regenerado. Esse processo impede que um único ID de solicitação seja usado para gerar vários tokens diferentes com novos prazos de expiração. 

1.  Se o token não for encontrado no DynamoDB, a função Lambda recuperará as chaves para criar o token e salvará o token no DynamoDB com a ID do evento e a ID da solicitação do cliente. A função Lambda grava um evento para EventBridge sinalizar que um novo token foi gerado. A função Lambda incrementa um contador Elasticache (Redis OSS) que acompanha o número de tokens gerados para o evento. 

1.  Se `queue_pos_expiry` estiver ativado, o cliente poderá consultar o tempo restante antes de sua expiração chamando a `queue_pos_expiry` API que invoca a função `GetQueuePositionExpiryTime` Lambda. 

 **O usuário sai da sala de espera:**

1.  Quando o cliente recebe seu token, ele entra no site de destino para iniciar a transação. Dependendo de como sua infraestrutura suporta uma integração com o JWT, o cliente pode precisar apresentar o token em um cabeçalho de solicitação, um cookie ou de outra forma. O autorizador do API Gateway pode ser usado para validar o token incluído na solicitação de um cliente. Qualquer biblioteca comercial ou de código aberto para validação e gerenciamento JWTs pode ser usada com a Sala de Espera Virtual em AWS tokens. Se o token for válido, o cliente poderá continuar a transação. 

1.  Depois que o cliente conclui a transação, uma API privada é chamada para atualizar o status do token do cliente e é concluída no DynamoDB. 

 **Expiração da posição na fila:**

1.  Quando esse recurso é ativado, o ID de solicitação correspondente a uma posição específica na fila é elegível para gerar um token somente por um intervalo de tempo especificado. 

 **Incremente o contador de atendimento ao expirar a posição da fila:**

1.  Quando esse recurso é ativado, o contador de serviço é automaticamente incrementado com base nas posições de fila expiradas que não conseguiram gerar tokens. 