Este projeto demonstra como integrar Amazon SQS com .NET 8 usando LocalStack para desenvolvimento local. O exemplo simula um sistema de e-commerce com processamento assíncrono de pedidos através de mensageria.
Aplicação console que simula um sistema de pedidos, gerando e enviando mensagens para uma fila SQS. Cada mensagem representa um pedido de e-commerce com itens, valores e dados do cliente.
Funcionalidades:
- Gera pedidos aleatórios com dados fictícios realistas
- Cria automaticamente a fila SQS se ela não existir
- Envia mensagens com atributos personalizados (tipo, valor, data)
- Exibe estatísticas da fila em tempo real
- Interface interativa para controle manual
Aplicação console que processa mensagens da fila de forma assíncrona, simulando o fluxo completo de processamento de um pedido.
Funcionalidades:
- Recebe mensagens usando long polling (eficiente)
- Processa pedidos simulando: validação, verificação de estoque, processamento de pagamento
- Remove mensagens processadas com sucesso da fila
- Mantém mensagens com erro na fila para reprocessamento
- Exibe logs detalhados com cores para facilitar acompanhamento
- .NET 8 SDK instalado
- Docker e Docker Compose instalados
- LocalStack rodando (ou use o docker-compose fornecido)
Se você não tem o LocalStack rodando, use o docker-compose fornecido:
docker-compose up -d
Para verificar se está funcionando:
curl http://localhost:4566/_localstack/health
Em um terminal, navegue até a pasta do Producer:
cd Producer
dotnet restore
dotnet run
O Producer permite enviar pedidos de exemplo pressionando qualquer tecla. Digite 'q' para sair.
Em outro terminal, navegue até a pasta do Consumer:
cd Consumer
dotnet restore
dotnet run
O Consumer ficará aguardando mensagens e processará automaticamente conforme chegarem. Use Ctrl+C para parar.
dotnet-sqs/
├── Producer/ # Projeto que envia mensagens
│ ├── Models/
│ │ └── PedidoMessage.cs # Modelo da mensagem de pedido
│ ├── Services/
│ │ └── SqsProducerService.cs # Serviço para enviar mensagens
│ ├── Program.cs # Aplicação principal do producer
│ ├── appsettings.json # Configurações
│ └── Producer.csproj # Arquivo do projeto
│
├── Consumer/ # Projeto que recebe mensagens
│ ├── Models/
│ │ └── PedidoMessage.cs # Modelo da mensagem de pedido
│ ├── Services/
│ │ └── SqsConsumerService.cs # Serviço para receber mensagens
│ ├── Program.cs # Aplicação principal do consumer
│ ├── appsettings.json # Configurações
│ └── Consumer.csproj # Arquivo do projeto
│
├── docker-compose.yml # LocalStack setup
└── README.md # Este arquivo
Ambos os projetos usam configurações similares:
{
"AWS": {
"Region": "us-east-1",
"ServiceURL": "http://localhost:4566",
"AccessKey": "test",
"SecretKey": "test"
},
"SQS": {
"QueueName": "mensagens-exemplo",
"MaxMessages": 10,
"WaitTimeSeconds": 20,
"VisibilityTimeoutSeconds": 30
}
}
- ServiceURL: Endpoint do LocalStack (http://localhost:4566)
- QueueName: Nome da fila SQS
- MaxMessages: Máximo de mensagens por polling
- WaitTimeSeconds: Tempo de espera por mensagens (long polling)
- VisibilityTimeoutSeconds: Tempo que mensagem fica invisível após ser recebida
- ✅ Gera pedidos aleatórios com dados fictícios
- ✅ Envia mensagens para SQS com atributos personalizados
- ✅ Cria automaticamente a fila se não existir
- ✅ Mostra estatísticas da fila
- ✅ Interface interativa no console
- ✅ Recebe mensagens da fila usando long polling
- ✅ Processa pedidos de forma assíncrona
- ✅ Simula validação, verificação de estoque e pagamento
- ✅ Remove mensagens processadas com sucesso da fila
- ✅ Tratamento de erros (mensagens com erro permanecem na fila)
- ✅ Mostra estatísticas em tempo real
-
Inicie o LocalStack:
docker-compose up -d
-
Execute o Consumer (em um terminal):
cd Consumer && dotnet run
-
Execute o Producer (em outro terminal):
cd Producer && dotnet run
-
No Producer, pressione qualquer tecla para enviar pedidos
-
No Consumer, observe o processamento automático das mensagens
AWSSDK.SQS
- SDK AWS para SQSMicrosoft.Extensions.Configuration.Json
- Configuração JSONMicrosoft.Extensions.DependencyInjection
- Injeção de dependênciaMicrosoft.Extensions.Hosting
- Host builderMicrosoft.Extensions.Logging.Console
- Logging no consoleSystem.Text.Json
- Serialização JSON
O LocalStack simula serviços AWS localmente. A configuração fornecida:
- Expõe a porta 4566 para acesso aos serviços
- Habilita persistência de dados
- Configura apenas o serviço SQS
-
Erro de conexão com LocalStack:
- Verifique se o LocalStack está rodando:
docker ps
- Teste a conectividade:
curl http://localhost:4566/_localstack/health
- Verifique se o LocalStack está rodando:
-
Fila não encontrada:
- Execute o Producer primeiro para criar a fila
- Ou crie manualmente:
aws --endpoint-url=http://localhost:4566 sqs create-queue --queue-name mensagens-exemplo
-
Mensagens não sendo processadas:
- Verifique os logs do Consumer
- Confirme que ambos usam o mesmo nome de fila
Sugestões para expandir o exemplo:
- ✨ Adicionar Dead Letter Queue (DLQ)
- ✨ Implementar retry com backoff exponencial
- ✨ Adicionar métricas e monitoramento
- ✨ Usar AWS Lambda para processamento serverless
- ✨ Implementar batch processing
- ✨ Adicionar validação de schema das mensagens