Como implementei notificações em tempo real com AWS
Necessidade do cliente
O usuário realiza determinadas operações que precisam ser notificadas a outros usuários. Por exemplo, quando um administrador concede permissão para que o usuário X visualize uma publicação, é necessário que o usuário X seja notificado em tempo real.
Solução
- Recursos utilizados
- API Websocket: Possui o endpoint responsável pela conexão do usuário à API, o qual está vinculado às funções Lambda de conexão e desconexão, gerenciando os status de conexão;
- 3 funções lambda:
- Função de conexão: É responsável por validar o JWT recebido como parâmetro de query e extrair os dados do usuário, registrar os dados de conexão do usuário com a API Websocket no banco de dados, buscar notificações pendentes do usuário no banco de dados e enviar cada uma por meio da invocação da função lambda de envio de mensagens;
- Função de desconexão: É responsável por remover os dados de conexão do usuári com a API Websocket;
- Função de enviar mensagem: É responsável por enviar a notificação para a pool do usuário baseado no id da conexão do usuário logado com a API Websocket;
Fluxograma das possibilidades de comunicação com a API Websocket
- Observação: Na imagem acima, a rota para marcar notificações como lidas pertence à API HTTP existente, e não à API WebSocket;
Proposta de melhoria
Na solução apresentada, o envio de notificações está completamente acoplado à funcionalidade executada. Por exemplo, ao adicionar uma permissão a um usuário em uma publicação, a notificação é enviada após a ação. Como proposta de melhoria, seria ideal enviar as notificações para uma fila, a fim de desacoplar o envio de notificações do restante da funcionalidade.