O sistema de notificação é um microserviço projetado para lidar com o envio de mensagens e notificações através de diferentes canais, como e-mail e push. Ele foi desenvolvido para ser escalável, modular e fácil de integrar com outras aplicações, utilizando boas práticas de arquitetura e design de software. Para este projeto utilizou-se como padrão o Template Method onde processos comuns são desempenhados por mais de uma funcionalidade.
- Envio de Notificações por E-mail: Permite o envio de mensagens para endereços de e-mail especificados, com suporte a conteúdo dinâmico e formatos variados.
- Envio de Notificações Push: Envia mensagens push para dispositivos ou serviços que suportem esse formato de notificação.
- Integração com Filas: Escuta mensagens de filas para processar e disparar as notificações de forma eficiente.
- Design Modular: Componentes separados para diferentes responsabilidades, como infraestrutura, interfaces e lógica de negócio.
- Python: Linguagem principal para o desenvolvimento do sistema.
- Docker: Para containerização e facilitação da implantação.
- Filas de Mensagens: Utiliza uma solução de fila para gerenciar tarefas assíncronas (RabbitMQ).
- SMTP e APIs Push: Para envio de e-mails (MailHog) e mensagens push (Mercure), respectivamente.
Este é o diretório principal contendo a implementação do serviço de notificação.
Responsável por escutar mensagens em filas e acionar os mecanismos apropriados para envio de notificações.
-
Pasta
infrastructure: Contém a implementação dos serviços de notificação:email_notification.py: Implementação para envio de e-mails utilizando protocolos SMTP ou serviços de terceiros.push_notification.py: Implementação para envio de notificações push via APIs de provedores.
-
Pasta
interfaces: Define interfaces e abstrações utilizadas para integrar os serviços de notificação com outras partes do sistema:notification_service.py: Define os métodos e contratos para enviar notificações e gerenciar comunicações entre módulos.
requirements.txt: Lista as dependências do Python necessárias para o funcionamento do sistema..env: Arquivo de variáveis de ambiente que contém informações sensíveis, como credenciais de acesso e URLs de serviços externos.
docker-compose-services.yml: Arquivo de configuração para orquestração de containers, facilitando o ambiente de desenvolvimento e produção.listen_queue.py: Script principal que inicializa o listener de fila para processar mensagens e disparar notificações.
- Docker e Docker Compose: Certifique-se de que estão instalados e configurados.
- Python 3.8+: Necessário para executar scripts localmente.
- Ferramenta de Gerenciamento de Filas: Como RabbitMQ ou outra solução compatível.
-
Clonar o Repositório:
git clone <url-do-repositorio> cd notification
-
Configurar Variáveis de Ambiente:
-
Crie um arquivo
.envna raiz do projeto com as seguintes variáveis:HUB_URL=http://localhost:80/.well-known/mercure MERCURE_PUBLISHER_JWT_KEY=!ChangeThisPublisherKey! MERCURE_SUBSCRIBER_JWT_KEY=!ChangeThisSubscriberKey! MERCURE_TOPIC= http://example.com/my-topic SMTP_SERVER=localhost SMTP_PORT=1025 SENDER_MAIL=no-reply@example.com RABBITMQ_HOST=localhost RABBITMQ_USER=user RABBITMQ_PASS=password ROUTING_KEYS=notification.email,notification.status
-
-
Instalar Dependências: Criar um ambiente virtual:
virtualenv .venv
Ativar o ambiente virtual
source .venv/bin/activateCaso deseje executar localmente, utilize:
pip install -r python/requirements.txt
-
Iniciar os Serviços: Utilize o Docker Compose para iniciar os serviços necessários:
docker-compose -f docker-compose-services.yml up --build
Em terminais separados e com os serviços já iniciados, seguir os seguintes passos:
-
Iniciar o Listener: O listener é responsável por processar mensagens na fila:
python python/listen_queue.py
-
Consumir Push Notifications:
- Receber push notifications:
python python/test/listen_mercure.py
-
Verificar e-mails:
- Abrir o browser no seguinte endereço: http://localhost:8025
-
Enviar Mensagens para a Fila:
- Utilizar do script
pythonno diretóriotest:
python python/test/send_message.py
- Utilizar do script
-
Verificar Logs (Opcional):
- Monitore os logs para garantir que as notificações estão sendo enviadas corretamente.
docker logs -f <nome-do-container>