Skip to content

Spring boot microservice example with Eureka Server + Eureka Client + Spring Cloud API Gateway + OAuth2.0 + Circuit Breaker + Resilience4J + FeignClient + RestTemplate

Notifications You must be signed in to change notification settings

subhashlamba/spring-boot-microservice-example

Repository files navigation

Spring boot microservice example Build Status

Spring boot microservice example with Eureka Server + Eureka Client + Spring Cloud API Gateway + OAuth2.0 + Circuit Breaker + Resilience4J + FeignClient + RestTemplate

  • Eureka Server : Eureka service registry
  • Spring Cloud API Gateway: API Gateway which is responsible to route the request to specific microservice
  • Spring OAuth2.0: Authentication service and responsible to secure the end points.
    • Eureka Client
    • Generate OAuth token
    • Validate the OAuth token
  • User Service: User microservice with a basic feature
    • Eureka Client
    • OAuth2.0 Client
    • Supports RestTemplate Client
    • Supports Resilience4J circuit breaker
    • Use of Resilience4J circuit breaker with RestTemplate
    • Swagger Document - http://localhost:8181/swagger-ui/index.html
  • Order Service: Order microservice with a basic feature
  • Notification Service: Notification microservice with basic feature

Checkout repository

> git clone https://github.com/subhashlamba/spring-microservices.git > cd spring-boot-microservices-example

Step 1: Start all services

1.1 For windows:

mvn clean install -f .\spring-boot-cloud-eureka-server\pom.xml mvn clean install -f .\spring-boot-cloud-zuul-routing\pom.xml mvn clean install -f .\spring-boot-cloud-eureka-user-service\pom.xml mvn clean install -f .\spring-boot-cloud-eureka-order-service\pom.xml mvn clean install -f .\spring-boot-cloud-eureka-notification-service\pom.xml mvn clean install -f .\spring-boot-cloud-authentication-service\pom.xml START "Server" java -jar spring-boot-cloud-eureka-server/target/eureka-server.jar START "API Gateway" java -jar spring-boot-cloud-zuul-routing/target/zuul-api-gateway.jar --server.port=8080 START "User Service" java -jar spring-boot-cloud-eureka-user-service/target/user-service.jar --server.port=8181 START "Order Service" java -jar spring-boot-cloud-eureka-order-service/target/order-service.jar --server.port=8282 START "Notification Service" java -jar spring-boot-cloud-eureka-notification-service/target/notification-service.jar --server.port=8383 START "Authentication Service" java -jar spring-boot-cloud-authentication-service/target/authentication-service.jar --server.port=8484 

Step 2: Check Eureka Server

Eureka server is running 8761 port, Now let's open it. Where we can check following instances are running:

  • 1 instance of API Gateway service
  • 1 instance of User service
  • 1 instance of Order service
  • 1 instance of Authentication service
  • 1 instance of Notification service

Eureka server : http://localhost:8761/

eureka server

Step 3: Configure Zipkin Server (Optional)

1. Download the [https://zipkin.io/pages/quickstart] Download zipkin 2. Start zipkin using following command: 
java -jar zipkin-server-2.23.2-exec.jar 
3. Open zipkin server : [http://localhost:9411/](http://localhost:9411/) 

Zipkin-Server

Step 4: Generate OAuth2.0 token

4.1 Using curl

curl -X POST \ http://localhost:8080/oauth/token \ -H 'authorization: Basic amF2YWRldmVsb3BlcnpvbmU6c2VjcmV0' \ -H 'cache-control: no-cache' \ -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \ -H 'postman-token: d2629b30-a7cf-fa72-df64-d71118afb549' \ -F grant_type=password \ -F username=zone1 \ -F password=mypassword

4.2 Using swagger

In the swagger UI, There is a "Autorize" button on the top, click on it it will open the following popup: 

eureka server

Use the following information

Username: zone1 Password: mypassword ClientId: javadeveloperzone Secret: secret 

Output

{ "access_token": "imdUX2_t_WQLSTUlaLBTjVyHUTg", "token_type": "bearer", "refresh_token": "zLufOQtLQO1u-8JP7KN64Dsc3wc", "expires_in": 522, "scope": "read write" }

Step 5: Create user using user microservice

5.1 Using curl

curl -X POST \ http://localhost:8080/user/ \ -H 'authorization: Bearer imdUX2_t_WQLSTUlaLBTjVyHUTg' \ -H 'cache-control: no-cache' \ -H 'content-type: application/json' \ -H 'postman-token: d73bb63f-969c-4081-1dee-77fa2b0f1f5a' \ -d '{"firstName":"subhash", "lastName": "Lamba"}' 

5.2 Using Swagger UI

eureka server

Step 6: Create order using order microservice

6.1 Using curl

curl -X POST \ http://localhost:8080/order/ \ -H 'authorization: Bearer DF977lxKiBzdWKTkZsE7XevqK40' \ -H 'cache-control: no-cache' \ -H 'content-type: application/json' \ -H 'postman-token: 2256b83e-30dc-3b8e-26f0-8d13c0dcfd44' \ -d '{"userId":1, "orderDate": "2021-01-01"}' 

6.2 Using Swagger UI

eureka server

Step 7: Get user and order using user microservice

7.1 Using curl

curl -X GET \ http://localhost:8080/user/1 \ -H 'authorization: Bearer DF977lxKiBzdWKTkZsE7XevqK40' \ -H 'cache-control: no-cache' \ -H 'content-type: application/json' \ -H 'postman-token: 5163fb23-f54f-c793-9faa-e9df54eab9d5' \ -d '{"userId":1, "orderDate": "2021-01-01"}' 
{ "user": { "id": 1, "firstName": "subhash", "lastName": "Lamba" }, "orders": [ { "id": 5, "orderDate": "2021-01-01T00:00:00.000+00:00", "userId": 1 } ] } 

7.1 Using Swagger UI

eureka server

About

Spring boot microservice example with Eureka Server + Eureka Client + Spring Cloud API Gateway + OAuth2.0 + Circuit Breaker + Resilience4J + FeignClient + RestTemplate

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published