saga-pattern-microservices
saga-pattern-microservices copied to clipboard
Demo saga pattern, outbox pattern using Spring Boot, Debezium, Kafka, Kafka Connect
trafficstars
Saga Pattern Microservices
Simple order flow to demo some concepts:
- Microservices using
Spring Boot,Spring Cloud,Spring Cloud Stream - Database per service using
Postgresql - Saga Pattern (Saga Orchestration): Distributed transaction span multiple services.
- Outbox Pattern: Avoid dual-writes, no 2PC required using
Kafka,Kafka Connect,Debezium,Outbox Event Router

Prerequisites
Java 21DockerDocker-compose
Get Started
Setup environment
AMD
export PLATFORM=linux/amd64 && docker-compose up -d
ARM
export PLATFORM=linux/arm64 && docker-compose up -d
Build projects
./mvnw clean package -DskipTests=true
Start Services
Run services api-gateway, order-service, customer-service, inventory-service
./mvnw -f api-gateway/pom.xml spring-boot:run
./mvnw -f order-service/pom.xml spring-boot:run
./mvnw -f customer-service/pom.xml spring-boot:run
./mvnw -f inventory-service/pom.xml spring-boot:run
| Service's name | Endpoint |
|---|---|
| Api Gateway | localhost:8080 |
| Order service | localhost:9090 |
| Customer service | localhost:9091 |
| Inventory service | localhost:9093 |
Start outbox connectors
Create outbox connectors
sh register-connectors.sh
Clean Up
Delete all connectors
sh delete-connectors.sh
Useful commands
Create new customer
curl --location 'localhost:8080/customer-service/customers' \
--header 'Content-Type: application/json' \
--data '{
"username": "usertest",
"fullName": "Test user 1",
"balance": 100
}'
Create new product
curl --location 'localhost:8080/inventory-service/products' \
--header 'Content-Type: application/json' \
--data '{
"name": "Test product 1",
"stocks": 10
}'
Create new order
curl --location 'localhost:8080/order-service/orders' \
--header 'Content-Type: application/json' \
--data '{
"customerId": "f0a000ad-ea44-4fa1-853b-207f9d9abe2c",
"productId": "d212c9d6-da3b-4fe2-b016-a852c8a8d32f",
"quantity": 1,
"price": 2
}'
Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.
License
MIT