- Architecture
- Microservices
- Technologies
- Prérequis
- Installation
- Configuration
- API Documentation
- Monitoring
- Tests
- Contributing
Notre système est composé de trois microservices interconnectés :
- Products → Commands: GraphQL
- Commands → Notifications: Kafka
- Configuration: Config Server centralisé
- Gestion du catalogue produits
- Base de données PostgreSQL
- API REST + GraphQL
- Opérations CRUD sur les produits
- Gestion des commandes
- Base de données MongoDB
- Circuit Breaker (Resilience4j)
- Communication GraphQL avec product-ms
- Producteur Kafka pour les notifications
- Gestion des notifications
- Base de données MongoDB
- Consommateur Kafka
- Système de notification asynchrone
- Framework: Spring Boot 3.2.1
- Communication:
- GraphQL
- Apache Kafka
- REST APIs
- Bases de données:
- PostgreSQL
- MongoDB
- Configuration: Spring Cloud Config
- Resilience: Circuit Breaker (Resilience4j)
- Containerisation: Docker
- Documentation: SpringDoc OpenAPI
- Tests: JUnit 5, Testcontainers
- JDK 17+
- Maven 3.8+
- Docker & Docker Compose
- Git
- Cloner le repository
git clone https://github.com/your-org/inventory-order-system.git
cd inventory-order-system- Lancer les services avec Docker Compose
docker-compose up -d- Vérifier les services
docker-compose psLe serveur de configuration centralise les propriétés des microservices :
# application.yml exemple
spring:
cloud:
config:
server:
git:
uri: https://github.com/your-org/config-repo
default-label: mainConfiguration Resilience4j pour order-ms :
resilience4j:
circuitbreaker:
instances:
productService:
slidingWindowSize: 10
failureRateThreshold: 50
waitDurationInOpenState: 10000Configuration des topics :
kafka:
bootstrap-servers: localhost:9092
topics:
order-notifications: order-events- Product Service:
http://localhost:8081/swagger-ui.html - Order Service:
http://localhost:8082/swagger-ui.html - Notification Service:
http://localhost:8083/swagger-ui.html
# Exemple de requête
query {
product(id: "123") {
name
price
stock
}
}- Métriques: Prometheus + Grafana
- Logs: ELK Stack
- Tracing: Jaeger
# Exécuter tous les tests
mvn clean test
# Tests d'intégration
mvn verify -P integration-tests- Fork le projet
- Créer une branche (
git checkout -b feature/AmazingFeature) - Commit les changements (
git commit -m 'Add AmazingFeature') - Push sur la branche (
git push origin feature/AmazingFeature) - Ouvrir une Pull Request
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
- Email: youssefouhba@gmail.com
- Issues: GitHub Issues
- Wiki: GitHub Wiki
Made with ❤️ by Youssaf Ouhba