Store Application - Spring Boot Microservice Example(Eureka Server, Config Server, API Gateway, Services , Grafana Stack, RabbitMQ Redis, Resilience4j, Docker, Kubernetes)
- This project is based Spring Boot Microservices with the usage of Docker and Kubernetes
- Customer can't register himself but login through auth service (provided by Okta) by user role (ADMIN or USER) through api gateway
- Customer can send any request to relevant service through api gateway with its bearer token
8 services whose name are shown below have been devised within the scope of this project.
- Config Server
- Eureka Server
- API Gateway
- Auth Service
- Order Service
- Payment Service
- Product Service
- Message Service
Method | Url | Description | Valid Request Body | Valid Request Params | Valid Request Params and Body |
---|---|---|---|---|---|
POST | /product | Add Product | Info | ||
GET | /product/{product_id} | Get Product By Id | Info | ||
PUT | /reduceQuantity/{product_id}?quantity={quantity_value} | Reduce Quantity of Product | Info | ||
POST | /order/placeorder | Place Order | Info | ||
GET | /order/{order_id} | Get Order By Id | Info |
- Core
- Spring
- Spring Boot
- Spring Boot Test (Junit, WireMock and Mockito)
- Spring Security
- Spring Web
- RestTemplate
- FeignClient
- Spring Data
- Spring Data JPA
- Spring Cloud
- Spring Cloud Gateway Server
- Spring Cloud Config Server
- Spring Cloud Config Client
- Netflix
- Eureka Server
- Eureka Client
- Spring
- Database
- MySQL
- Redis
- Grafana Stack
- Docker Compose
- Google Jib
- Kubernetes
- RabbitMQ
- Junit
- Log4j2
Customer Role
http://localhost:8072/authenticate/login
username : customer@store.com,
password : user12345!
Admin Role
http://localhost:8072/authenticate/login
username : admin@admin.com,
password : store.123456789!
http://localhost:8072/services/products/product
{
"name" : "Google Pixel 8",
"price" : 1000,
"quantity" : 15
}
Bearer Token : User (ADMIN ROLE) Token
http://localhost:8072/services/orders/order/placeOrder
{
"productId" : 1,
"totalAmount" : 100,
"quantity" : 1,
"paymentMode" : "CASH"
}
Bearer Token : User (CUSTOMER Role) Token
http://localhost:8072/services/products/product/reduceQuantity/1?quantity=1
Bearer Token : User Token
http://localhost:8072/services/products/product/{productId}
Bearer Token : Both Token
http://localhost:8072/services/payments/payment/order/{orderId}
Bearer Token : Both Token
http://localhost:8072/services/orders/order/{orderId}"
Bearer Token : Both Token
Access to see queses by RabbitMQ:
http://localhost:15672/
user: guest
password: guest
Access to see metrics, tracing and so on, Grafana Dashboard
http://localhost:3000/
user: admin
password: admin
Access to see queses by RabbitMQ:
kubectl port-forward --namespace default svc/rabbitmq 5672:5672 echo "URL : http://127.0.0.1:15672/"
Access to see metrics, tracing and so on, Grafana Dashboard
echo "Browse to http://127.0.0.1:8080"
kubectl port-forward svc/grafana 3000:3000 &
echo "User: admin"
echo "Password: $(kubectl get secret grafana-admin --namespace default -o jsonpath="{.data.GF_SECURITY_ADMIN_PASSWORD}" | base64 -d)"
1 ) Download your project from this link https://github.com/kirsing/StoreApp
2 ) Go to the project's home directory : cd ~/StoreApp-main
Docker
1 ) Install Docker Desktop. Here is the installation https://www.docker.com/get-started/
:
2 ) Go to the specific directory: cd ~/StoreApp-main/docker-compose/local
3 ) Run all Containers through this command - docker compose up -d
Kubernetes
1 ) Install minikube or enable Kubernetes on Docker Desktop
2 ) Install Helm https://helm.sh/docs/intro/quickstart/
3 ) Go to the directory : cd ~/StoreApp/helm/env
4 ) Install all Helm Charts using Helm through this command
helm install <your-application-name> dev-env