Skip to content

Spring Cloud Example (API Gateway, Zipkin, Redis, Authentication, Config Server, Docker, Kubernetes )

Notifications You must be signed in to change notification settings

Rapter1990/springbootmicroservicedailybuffer

Repository files navigation

Spring Boot Microservice Example (Eureka Server, Config Server, API Gateway, Services , Zipkin, Redis, Resilience4j, Docker, Kubernetes)

Main Information

About the project

  • 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

Docker Hub

Link

Git Backend for Config server

Link

Explore Rest APIs

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

Used Dependencies

  • 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
  • Database
    • Mysql
  • Redis
  • Zipkin
  • Docker
  • Kubernetes
  • Jenkins
  • Junit
  • Log4j2

Valid Request Body

    http://localhost:9090/authenticate/signup
    
    {
        "username" : "User",
        "password" : "User",
        "email" : "user@refreshtoken.com",
        "roles" : [
                "ROLE_USER"
        ]
    }
    
    http://localhost:9090/authenticate/signup
    
    {
        "username" : "admin1",
        "password" : "admin1",
        "email" : "admin1@refreshtoken.com",
        "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

Valid Request Params

    http://localhost:9090/product/reduceQuantity/1?quantity=1
    
    Bearer Token : User Token

Valid Request Params and Body

    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

🔨 Run the App

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

Screenshots

Click here to show the screenshot of project

Docker Desktop to show all running containers

Docker Hub

Kubernetes Dashboard

Jenkins Figure 1

Jenkins Figure 2