Microsserviço Node.js orientado a eventos para consumir OrderCreated, aplicar idempotência transacional em PostgreSQL e atualizar estado para Processed.
- Domain:
src/domain - Application:
src/application - Infra:
src/infra(PostgreSQL, RabbitMQ, observabilidade) - Interfaces:
src/interfaces/http
- RabbitMQ real com
amqplib:- exchange
topic - filas duráveis
- ack manual
- retry via exchange/queue de retry + TTL
- DLQ final para mensagens esgotadas
- exchange
- Persistência real PostgreSQL com
pg:processed_orders(idempotência por PRIMARY KEY/UNIQUE)order_processing_log- transação por evento processado
- Autenticação JWT HS256:
/healthe/metricspúblicos/orders/:idprotegido com bearer token
- Observabilidade:
- logs estruturados JSON
- endpoint
/metricsPrometheus - contadores:
total_orders_processed,total_failures,retry_count
- Configuração obrigatória por ambiente:
PORT,RABBITMQ_URL,POSTGRES_URL,JWT_SECRET,RETRY_ATTEMPTS,RETRY_DELAY_MS
npm ci
npm test
npm startdocker compose up --buildServiços:
- node-service
- rabbitmq
- postgres
Workflow em .github/workflows/ci.yml:
npm cinpm test- fail se cobertura < 85%
- JWT validado localmente via
cryptopara reduzir dependências. - Estratégia de retry é linear com TTL fixo; em produção, pode evoluir para exponential backoff.