OrderMS é um microserviço especializado no processamento e gerenciamento de pedidos em uma arquitetura distribuída. O serviço implementa padrões modernos de desenvolvimento, incluindo Event-Driven Architecture e Domain-Driven Design.
- 🏗️ Arquitetura Orientada a Eventos - Processamento assíncrono via RabbitMQ
- 📦 Persistência NoSQL - MongoDB para armazenamento escalável
- 🔄 Event Sourcing - Rastreamento completo do ciclo de vida dos pedidos
- 🚀 Cloud Ready - Containerização com Docker
- 🧪 Testes Automatizados - Cobertura completa com JUnit e Bruno
- 📊 Monitoramento - Logs estruturados e métricas
graph TB
A[Cliente] --> B[OrderMS API]
B --> C[OrderCreatedListener]
C --> D[MongoDB]
B --> E[RabbitMQ]
E --> F[orderms-order-created Queue]
F --> C
subgraph "Domínio"
G[OrderEntity]
H[OrderItem]
end
subgraph "Eventos"
I[OrderCreatedEvent]
J[OrderItemEvent]
end
Componente | Responsabilidade |
---|---|
OrderEntity | Agregado principal representando um pedido |
OrderItem | Value Object para itens do pedido |
OrderCreatedListener | Event Handler para eventos de criação |
RabbitMqConfig | Configuração de mensageria e filas |
- ☕ Java 21+
- 🐳 Docker & Docker Compose
- 📦 Maven 3.8+ (ou usar o wrapper incluído)
git clone https://github.com/tech3br/spring-boot-orderms-rabbitmq
cd orderms
# Sobe MongoDB e RabbitMQ via Docker
cd docker
docker-compose up -d
# Usando Maven Wrapper (recomendado)
./mvnw spring-boot:run
# Ou usando Maven local
mvn spring-boot:run
- 🌐 Aplicação: http://localhost:8080
- 🐰 RabbitMQ Management: http://localhost:15672 (guest/guest)
- 🍃 MongoDB: localhost:27017
# application.properties
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=orderdb
spring.data.mongodb.username=admin
spring.data.mongodb.password=admin123
Fila | Propósito |
---|---|
orderms-order-created |
Eventos de criação de pedidos |
{
"codigoPedido": 12345,
"codigoCliente": 67890,
"itens": [
{
"produto": "Notebook Dell",
"quantidade": 1,
"preco": 2500.00
}
]
}
@Document(collection = "orders")
public class OrderEntity {
private String id;
private Long codigoPedido;
private Long codigoCliente;
private List<OrderItem> itens;
private BigDecimal total;
private LocalDateTime createdAt;
}
./mvnw test
# Instale o Bruno CLI
npm install -g @usebruno/cli
# Execute os testes de API
cd orderms
bru run
# Infraestrutura completa
docker-compose -f docker/docker-compose.yml up -d
# Criar imagem Docker (exemplo)
docker build -t orderms:latest .
orderms/
├── 📁 src/main/java/tech/tech3br/orderms/
│ ├── 📁 config/ # Configurações (RabbitMQ, etc.)
│ ├── 📁 entity/ # Entidades de domínio
│ ├── 📁 listener/ # Event Handlers
│ │ └── 📁 dto/ # DTOs de eventos
│ └── 📄 OrdermsApplication.java
├── 📁 src/main/resources/
│ └── 📄 application.properties
├── 📁 docker/
│ └── 📄 docker-compose.yml
├── 📁 orderms/ # Testes Bruno
└── 📄 pom.xml
sequenceDiagram
participant Client as Cliente
participant API as OrderMS API
participant Queue as RabbitMQ
participant Listener as OrderListener
participant DB as MongoDB
Client->>API: Cria Pedido
API->>Queue: Publica OrderCreatedEvent
Queue->>Listener: Consome Evento
Listener->>DB: Persiste Pedido
Listener->>API: Confirma Processamento
- Spring Boot 3.5.3 - Framework principal
- Spring AMQP - Integração RabbitMQ
- Spring Data MongoDB - Persistência NoSQL
- Jackson - Serialização JSON
- MongoDB - Banco de dados NoSQL
- RabbitMQ - Message Broker
- Docker - Containerização
- JUnit 5 - Testes unitários
- Bruno - Testes de API
- Spring Boot Test - Testes de integração
// Exemplo de log no OrderCreatedListener
logger.info("Message consumed: {}", message);
- ✅ MongoDB Connection
- ✅ RabbitMQ Connection
- ✅ Application Status
- 🍴 Fork o projeto
- 🌿 Crie uma feature branch (
git checkout -b feature/AmazingFeature
) - ✅ Commit suas mudanças (
git commit -m 'Add some AmazingFeature'
) - 📤 Push para a branch (
git push origin feature/AmazingFeature
) - 🔄 Abra um Pull Request
feat:
nova funcionalidadefix:
correção de bugdocs:
documentaçãostyle:
formataçãorefactor:
refatoraçãotest:
testeschore:
manutenção
Este projeto está sob a licença MIT.
Desenvolvido com ❤️ por Tech3BR
- 📧 Email: dfsdireito95@gmail.com