Este projeto implementa uma arquitetura de microsserviços event-driven para processamento de pedidos utilizando Go, Kafka e MySQL. O sistema segue padrões de comunicação assíncrona para lidar com criação de pedidos, validação de pagamento e processos de negócio subsequentes.
- Porta: 8080
- Database: MySQL (banco de dados orders)
- Cache: Redis
- Responsabilidades:
- Gerencia criação de pedidos via endpoint
/create-checkout - Persiste pedidos com status "pendente pagamento"
- Publica eventos
order.createdno Kafka - Consome eventos de confirmação de pagamento do Kafka
- Gerencia criação de pedidos via endpoint
- Porta: 8082
- Cache: Redis
- Responsabilidades:
- Consome eventos
order.createddo Kafka - Realiza validação de pagamento
- Publica eventos de status de pagamento (
payment.confirmedoupayment.failed) no Kafka
- Consome eventos
-
Criação do Pedido
- Cliente envia requisição para
order-service/create-checkout - Pedido é salvo com status "pendente pagamento" no MySQL
- Evento
order.createdé publicado no Kafka
- Cliente envia requisição para
-
Processamento de Pagamento
payment-serviceconsome eventoorder.created- Validação de pagamento é executada
- Com base no resultado:
- Sucesso: evento
payment.confirmedpublicado - Falha: evento
payment.failedpublicado
- Sucesso: evento
-
Atualização de Status do Pedido
order-serviceconsome eventos de status de pagamento- Status do pedido é atualizado no MySQL
- Pedidos com falha são marcados como "com falha"
- Kafka: Plataforma de streaming de eventos para comunicação assíncrona
- Tópicos:
order.created: Acionado quando novos pedidos são criadospayment.confirmed: Validação de pagamento bem-sucedidapayment.failed: Falha na validação de pagamento
- MySQL: Armazenamento principal de informações de pedidos
- Redis: Camada de cache para otimização de performance
- Kafka UI: Interface web para gerenciamento do Kafka (Porta 8081)
- Propósito: Sistema de notificação interna de compras
- Gatilho: Consome eventos
payment.confirmed - Funcionalidade: Enviar alertas internos para compras bem-sucedidas
- Propósito: Integração com gestão de estoque
- Gatilho: Consome eventos
payment.confirmed - Funcionalidade:
- Recuperar informações de produto e estoque
- Reduzir níveis de inventário para pedidos confirmados
- Comunicar com microsserviço externo de estoque
- Após confirmação de pagamento:
notify-serviceprocessa notificações internas de comprainventory-servicegerencia redução de estoque- Eventos adicionais podem ser publicados para atualizações de inventário
- Linguagem: Go
- Web Framework: Gin
- Message Queue: Apache Kafka
- Database: MySQL 8.0
- Cache: Redis 8.2
- Containerização: Docker & Docker Compose
services/
├── order-service/
│ ├── internal/
│ │ ├── domain/
│ │ ├── usecases/
│ │ ├── repository/
│ │ └── rest/
│ ├── kafka/
│ │ ├── events/
│ │ ├── producer/
│ │ └── consumer/
│ └── infra/
└── payment-service/
├── internal/
│ ├── domain/
│ ├── usecases/
│ └── rest/
├── kafka/
│ ├── events/
│ ├── producer/
│ └── consumer/
└── infra/
Cada serviço utiliza variáveis de ambiente para:
- Conexões de banco de dados
- Configuração do Redis
- Configurações do broker Kafka
- Parâmetros específicos do serviço
GET /create-checkout: Cria novo checkout de pedido
- Sem endpoints HTTP diretos (apenas event-driven)
- Docker & Docker Compose
- Go 1.21+
docker-compose up -dIsso iniciará:
- MySQL (Porta 3306)
- Kafka (Porta 9092)
- Kafka UI (Porta 8081)
- Redis (Porta 6380)
- Order Service (Porta 8080)
- Payment Service (Porta 8082)
{
"event_id": "string",
"event_type": "order.created",
"timestamp": "datetime",
"content_id": "int",
"checkout": {
"id": "int",
"price": "float",
"status": "string"
}
}{
"event_id": "string",
"event_type": "payment.confirmed",
"timestamp": "datetime",
"content_id": "int",
"order_id": "int"
}{
"event_id": "string",
"event_type": "payment.failed",
"timestamp": "datetime",
"content_id": "int",
"order_id": "int"
}- Logging estruturado com informações contextuais
- Rastreamento de eventos com IDs de correlação
- Logging de erros com stack traces
- Verificações de conectividade com banco de dados
- Disponibilidade do broker Kafka
- Validação de conexão Redis
- Setup de broker único para desenvolvimento
- Configurável para deployment multi-broker em produção
- Criação automática de tópicos habilitada
- Serviços stateless permitem escalonamento horizontal
- Pool de conexões com banco de dados
- Clustering Redis para alta disponibilidade
