Sistema distribuído de processamento de pedidos que demonstra comunicação assíncrona entre microserviços através de webhooks. O projeto implementa um fluxo completo onde o marketplace notifica sistemas externos sobre eventos de pedidos, permitindo que múltiplos consumidores processem e enriqueçam essas informações de forma independente.
Este projeto simula um cenário real de e-commerce onde:
- Marketplace Service recebe e processa pedidos de diferentes lojas
- Ao criar um pedido, o marketplace dispara webhooks para sistemas registrados
- Receiver Service atua como consumidor, recebendo notificações, enriquecendo dados e persistindo informações processadas
- Cada serviço mantém seu próprio banco de dados, seguindo o padrão de database-per-service
Marketplace Service → Webhook → Receiver Service → Banco de Dados
(cria pedido) (notifica) (enriquece) (persiste)
-
Marketplace Service (porta 8000)
- Gerenciamento de pedidos e lojas
- Sistema de registro e disparo de webhooks
- API REST para criação de pedidos
- Autenticação via token compartilhado
-
Receiver Service (porta 8001)
- Recepção de eventos via webhook
- Enriquecimento de dados dos pedidos
- Persistência de eventos processados
- Validação de autenticidade dos webhooks
-
PostgreSQL (porta 5434)
- Banco de dados compartilhado
- Schemas isolados por serviço (marketplace_service, receiver_service)
- Migrations gerenciadas via Flyway
- Backend: Kotlin + Spring Boot
- Banco de Dados: PostgreSQL 16
- Containerização: Docker + Docker Compose
- Infraestrutura: Terraform (AWS ECS, RDS, VPC)
- Migrations: Flyway
- HTTP Client: OpenFeign
- Docker
- Docker Compose
cd docker
docker-compose up -dAguarde alguns segundos para os serviços iniciarem completamente. Você pode acompanhar os logs:
docker-compose logs -fPrimeiro, registre o receiver-service como destino dos webhooks do marketplace:
curl -X POST http://localhost:8000/api/v1/webhooks \
-H "Content-Type: application/json" \
-H "Authorization: marketplace-service-secret" \
-d '{
"store_ids": ["store-1"],
"callback_url": "http://receiver-service:8001/api/v1/events",
"token": "receiver-service-secret"
}'Crie um pedido no marketplace. Isso automaticamente dispara o webhook para o receiver:
curl -X POST http://localhost:8000/api/v1/orders \
-H "Content-Type: application/json" \
-H "Authorization: marketplace-service-secret" \
-d '{
"store_id": "store-1",
"items": [
{
"product_name": "Placa de video RTX 5090",
"quantity": 1,
"unit_price": 8980,
"discount": 100,
"tax": 10
}
]
}'O fluxo completo acontece automaticamente:
- Marketplace cria o pedido
- Marketplace dispara webhook para o receiver
- Receiver recebe o evento, enriquece os dados e salva
Você pode verificar os logs para confirmar:
docker-compose logs marketplace-service | grep -i webhook
docker-compose logs receiver-service | grep -i eventAltere o status de um pedido no marketplace. Isso automaticamente dispara o webhook para o receiver:
curl -X PATCH http://localhost:8000/api/v1/orders/cf062c2f-0a31-472c-a34f-356f9461014f/status \
-H "Content-Type: application/json" \
-H "Authorization: marketplace-service-secret" \
-d '{
"status": "PAID"
}'cd docker
docker-compose downPara remover também os volumes (dados do banco):
docker-compose down -v.
├── marketplace-service/ # Serviço de marketplace (Kotlin/Spring Boot)
├── receiver-service/ # Serviço receptor de eventos (Kotlin/Spring Boot)
├── docker/ # Configuração Docker Compose
└── infra/ # Infraestrutura AWS (Terraform)
- Marketplace Service: Documentação da API do marketplace-service
Figura 1: Documentação da API com Swagger-UI do marketplace-service
- Receiver Service: Documentação da API do receiver-service
Figura 2: Documentação da API com Swagger-UI do receiver-service
Figura 3: Tela inicial do JaCoCo com a cobertura de testes do marketplace-service
Figura 4: Tela inicial do JaCoCo com a cobertura de testes do receiver-service
- SonarCloud: Melhorar a qualidade e segurança do código.
O Terraform é uma ferramenta de Infraestrutura como Código (IaC) criada pela HashiCorp que permite criar, modificar e versionar infraestrutura de forma automatizada e declarativa.
Em vez de configurar servidores, redes e serviços manualmente no console da nuvem, você descreve toda a infraestrutura em arquivos de código (usando a linguagem HCL – HashiCorp Configuration Language). O Terraform então interpreta esse código e provisiona os recursos automaticamente em provedores como Amazon Web Services, Microsoft Azure, Google Cloud Platform, entre outros.
- Automação e redução de erros manuais
- Versionamento da infraestrutura (via Git, por exemplo)
- Reprodutibilidade de ambientes (dev, staging, produção)
- Multicloud e multi-provider
- Infraestrutura padronizada e escalável
Figura 5: Terraform sendo executado
O processo de execução dos testes estão sendo realizados no github action com o SonarCloud. O code deploy foi implementado utilizando a infraestrutura da AWS. Para isso, se a build, junto com os testes e o SonarCloud forem executados com sucesso, o github action cria as imagens e salva no ECR fazer a execução do deploy no ECS.
Figura 6: Arquitetura da infraestrutura para AWS ECS com AWS e Github Actions
Verifique se as portas 8000, 8001 e 5434 estão disponíveis:
netstat -an | findstr "8000 8001 5434"curl http://localhost:8000/actuator/health
curl http://localhost:8001/actuator/healthdocker-compose logs -f marketplace-service
docker-compose logs -f receiver-service
docker-compose logs -f postgres