Skip to content

wesleyosantos91/messaging-fanout-pattern

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📨 Messaging Fanout Pattern

Status Terraform AWS License

Uma prova de conceito (POC) demonstrando a implementação do padrão Messaging Fanout utilizando AWS SNS e SQS com Terraform.

SobreArquiteturaTecnologiasComo UsarExemplosAutor


📋 Sobre

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

🎯 Casos de Uso

  • Notificações para múltiplos sistemas
  • Processamento paralelo de eventos
  • Integração entre microserviços
  • Event-driven architecture

🏗 Arquitetura

Arquitetura

Fluxo de Mensagens

  1. Publisher: Aplicação publica mensagem no tópico SNS
  2. Filter Policy: SNS filtra mensagens baseado em atributos
  3. Subscribers: Mensagens são distribuídas para filas SQS específicas
  4. Consumers: Aplicações consomem mensagens das filas de forma independente

🚀 Tecnologias

  • Terraform - Infrastructure as Code
  • AWS SNS - Simple Notification Service
  • AWS SQS - Simple Queue Service
  • HCL - HashiCorp Configuration Language

💻 Como Usar

Pré-requisitos

  • AWS CLI configurado
  • Terraform >= 1.0
  • Credenciais AWS com permissões para SNS e SQS

Instalação

# 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 apply

Destruir Infraestrutura

terraform destroy

📝 Exemplos

Publicando uma Mensagem no SNS

  1. Acesse o console da AWS SNS
  2. Selecione o tópico criado
  3. Clique em "Publish message"
  4. Adicione o corpo da mensagem e os Message attributes conforme definido na filter_policy

Exemplo de Message Attributes:

{
  "tipo_pessoa": {
    "DataType": "String",
    "StringValue": "FISICA"
  }
}

Publicando evento no SNS

Visualizando Mensagem na Fila SQS

Após a publicação, a mensagem é roteada para a fila correspondente baseado nos filtros:

Evento recebido na fila

Consumindo a Mensagem

A aplicação consome a mensagem da fila SQS de forma assíncrona:

Evento consumido


📚 Fundamentos Teóricos

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

Vantagens do Padrão

  • 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

👨‍💻 Autor

Wesley Oliveira Santos
Wesley Oliveira Santos

📄 Licença

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

About

POC Messaging Fanout Pattern

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages