Spring Boot Microservice Example (Eureka Server, Config Server, API Gateway, Services , Zipkin, Redis, Resilience4j, Docker, Kubernetes)
- This project is based Spring Boot Microservices with the usage of Docker and Kubernetes
- User can register and login through auth service by user role (ADMIN or USER) through api gateway
- User can send any request to relevant service through api gateway with its bearer token
7 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
Method | Url | Description | Valid Request Body | Valid Request Params | Valid Request Params and Body |
---|---|---|---|---|---|
POST | authenticate/signup | Signup for User and Admin | Info | ||
POST | authenticate/login | Login for User and Admin | Info | ||
POST | authenticate/refreshtoken | Refresh Token for User and Admin | Info | ||
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 | ||
DELETE | /product/{product_id} | Delete Prodcut By Id | Info | ||
POST | /order/placeorder | Place Order | Info | ||
GET | /order/{order_id} | Get Order By Id | Info | ||
GET | /payment/order/{order_id} | Get Payment Details by Order Id | Info |
- Core
- Spring
- Spring Boot
- Spring Boot Test (Junit)
- Spring Security
- Spring Web
- RestTemplate
- FeighClient
- 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
- Zipkin
- Docker
- Kubernetes
- Jenkins
- Junit
- Log4j2
http://localhost:9090/authenticate/signup
{
"username" : "User",
"password" : "User",
"email" : "[email protected]",
"roles" : [
"ROLE_USER"
]
}
http://localhost:9090/authenticate/signup
{
"username" : "admin1",
"password" : "admin1",
"email" : "[email protected]",
"roles" : [
"ROLE_ADMIN"
]
}
http://localhost:9090/authenticate/login
{
"username" : "User",
"password" : "User"
}
http://localhost:9090/authenticate/login
{
"username" : "UserAdmin",
"password" : "UserAdmin"
}
http://localhost:9090/authenticate/refreshtoken
{
"refreshToken" : ""
}
http://localhost:9090/product
{
"name" : "Product 1",
"price" : 100,
"quantity" : 1
}
Bearer Token : User Token
http://localhost:9090/order/placeorder
{
"productId" : 1,
"totalAmount" : 100,
"quantity" : 1,
"paymentMode" : "CASH"
}
Bearer Token : User Token
http://localhost:9090/product/reduceQuantity/1?quantity=1
Bearer Token : User Token
http://localhost:9090/product/{prodcutId}
Bearer Token : User Token
http://localhost:9090/product/{prodcutId}
Bearer Token : Admin Token
http://localhost:9090/order/{order_id}
Bearer Token : User Token
http://localhost:9090/payment/order/{order_id}
Bearer Token : User Token
Local
1 ) Download your project from this link https://github.com/Rapter1990/springbootmicroservicedailybuffer
2 ) Go to the project's home directory : cd springbootmicroservicedailybuffer
3 ) Run Service Registry (Eureka Server)
4 ) Run config server
5 ) Run zipkin and redis through these commands shown below on Docker
docker run -d -p 9411:9411 openzipkin/zipkin
docker run -d --name redis -p 6379:6379 redis
6 ) Run api gateway
7 ) Run other services (auth-service, orderservice, paymentservice and lastly productservice)
Docker
1 ) Install Docker Desktop. Here is the installation link : https://docs.docker.com/docker-for-windows/install/
2 ) Build jar file for all services shown below
Service | Command |
---|---|
service-registry | mvn clean install |
configserver | mvn clean install |
apigateway | mvn clean install -DskipTests |
auth-service | mvn clean install -DskipTests |
orderservice | mvn clean install -DskipTests |
productservice | mvn clean install -DskipTests |
paymentservice | mvn clean install -DskipTests |
3 ) Build all images and push to Docker Hub
1 ) service-registry
- docker build -t microservicedailybuffer/serviceregistry:0.0.1 .
- docker tag microservicedailybuffer/serviceregistry:0.0.1 noyandocker/serviceregistry
- docker push noyandocker/serviceregistry
2 ) configserver
- docker build -t microservicedailybuffer/configserver:0.0.1 .
- docker tag microservicedailybuffer/configserver:0.0.1 noyandocker/configserver
- docker push noyandocker/configserver
3 ) api-gateway
- docker build -t microservicedailybuffer/apigateway:0.0.1 .
- docker tag microservicedailybuffer/apigateway:0.0.1 noyandocker/apigateway
- docker push noyandocker/apigateway
4 ) auth-service
- docker build -t microservicedailybuffer/authservice:0.0.1
- docker tag microservicedailybuffer/authservice:0.0.1 noyandocker/authservice
- docker push noyandocker/authservice
5 ) productservice
- docker build -t microservicedailybuffer/productservice:0.0.1 .
- docker tag microservicedailybuffer/productservice:0.0.1 noyandocker/productservice
- docker push noyandocker/productservice
6 ) orderservice
- docker build -t microservicedailybuffer/orderservice:0.0.1 .
- docker tag microservicedailybuffer/orderservice:0.0.1 noyandocker/orderservice
- docker push noyandocker/orderservice
7 ) paymentservice
- docker build -t microservicedailybuffer/paymentservice:0.0.1 .
- docker tag microservicedailybuffer/paymentservice:0.0.1 noyandocker/paymentservice
- docker push noyandocker/paymentservice
4 ) Run all Containers through this command shown below under main folder
docker-compose up -d
5 ) Send request to any service by using request collections under postman_collection
Kubernetes
1 ) Install minikube to access this link https://minikube.sigs.k8s.io/docs/start/
2 ) Open command prompt and install kubectl through this command shown below
minikube kubectl --
3 ) Start minikube through this command shown below.
minikube start
4 ) Open minikube dashboard through this command shown below.
minikube dashboard
5 ) Run all images coming from Docker hub on Kubernetes through this command shown below.
kubectl apply -f k8s
6 ) Show all information about images running on Kubernetes through this command
kubectl get all
7 ) Show all services running on Kubernetes through this command
kubectl get services
8 ) Show eureka server on Kubernetes through this command
minikube service eureka-lb
9 ) Show api gateway on Kubernetes through this command
minikube service cloud-gateway-svc
10 ) Copy IP address and Replace it with localhost of the endpoints defined in postman collection
Jenkins
1 ) Download jenkins to access this link https://hub.docker.com/r/jenkins/jenkins
2 ) Run Jenkins through this command shown below
docker run -p 8080:8080 -p 50000:50000 --restart=on-failure jenkins/jenkins:lts-jdk11
3 ) Install Jenkins and define username and password
3 ) Click New Item and Create pipeline to run Jenkinsfile
4 ) Run pipeline