Uma prova de conceito (POC) demonstrando a implementação do padrão Messaging Fanout utilizando AWS SNS e SQS com Terraform.
Sobre • Arquitetura • Tecnologias • Como Usar • Exemplos • Autor
O Messaging Fanout Pattern é um padrão de mensageria que permite a transmissão de mensagens de um produtor para múltiplos consumidores de forma desacoplada e escalável.
Este projeto implementa o padrão utilizando serviços gerenciados da AWS:
- Amazon SNS (Simple Notification Service) como publisher
- Amazon SQS (Simple Queue Service) como consumer
- Filter Policies para roteamento inteligente de mensagens
- Notificações para múltiplos sistemas
- Processamento paralelo de eventos
- Integração entre microserviços
- Event-driven architecture
- Publisher: Aplicação publica mensagem no tópico SNS
- Filter Policy: SNS filtra mensagens baseado em atributos
- Subscribers: Mensagens são distribuídas para filas SQS específicas
- Consumers: Aplicações consomem mensagens das filas de forma independente
- Terraform - Infrastructure as Code
- AWS SNS - Simple Notification Service
- AWS SQS - Simple Queue Service
- HCL - HashiCorp Configuration Language
- AWS CLI configurado
- Terraform >= 1.0
- Credenciais AWS com permissões para SNS e SQS
# Clone o repositório
git clone https://github.com/wesleyosantos91/messaging-fanout-pattern.git
# Entre no diretório
cd messaging-fanout-pattern
# Inicialize o Terraform
terraform init
# Valide a configuração
terraform validate
# Planeje a infraestrutura
terraform plan
# Aplique as mudanças
terraform applyterraform destroy- Acesse o console da AWS SNS
- Selecione o tópico criado
- Clique em "Publish message"
- Adicione o corpo da mensagem e os Message attributes conforme definido na
filter_policy
Exemplo de Message Attributes:
{
"tipo_pessoa": {
"DataType": "String",
"StringValue": "FISICA"
}
}Após a publicação, a mensagem é roteada para a fila correspondente baseado nos filtros:
A aplicação consome a mensagem da fila SQS de forma assíncrona:
Fan-out é um padrão de mensagens onde as mensagens são transmitidas de um para muitos. Um exemplo básico desse padrão pode ser visto na funcionalidade de um sistema de mensagens Publish/Subscribe (Pub/Sub).
- ✅ Desacoplamento: Produtores e consumidores não precisam conhecer uns aos outros
- ✅ Escalabilidade: Adicione novos consumidores sem modificar o produtor
- ✅ Resiliência: Falhas em um consumidor não afetam outros
- ✅ Flexibilidade: Filtragem de mensagens por atributos
|
Wesley Oliveira Santos |
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
⭐ Se este projeto foi útil, considere dar uma estrela!
Feito com ❤️ por Wesley Oliveira Santos



