Spring Boot Microservice Eureka Zuul Docker Gateway Kubernetes Save

Spring Boot rest microservices using Kubernetes, ConfigMap, Eureka, Zuul / Spring Boot Gateway, Docker. Monitoring with logstash, logback, elasticsearch, kibana.

Project README

SPRING BOOT MICROCSERVICE USING SPRING CLOUD, EUREKA, RIBBON, ZUUL, ZIPKIN, SLEUTH

This project is created to get experience on Microservices With Netflix OSS. This is a simple project by coded imperative programming with simple business requirements.

ELK Stack has been integrated for monitoring since version 1.1.0.

There are four microservices:

  • Accounts : This microservice is responsible for managing accounts. An account could be buyer, seller or an backoffice account but there is only buyer account.
  • Products : This microservice is responsible for managing products.
  • Orders : This microservice is responsible for managing orders. It doesn't know anything about account and product except id.
  • Backoffice: This microservice is provides endpoints for backoffice ui.

Backoffice microservice has an endpoint with path "/api/v1/backoffice/orders". This endpoint return a list of orders with name of product and account. It connects accounts, products and orders microservices via Feign.

EndPoints

Service EndPoint Port Method Description
Accounts /api/v1/accounts/{id} 7500 GET Return detail of specified account
Accounts /api/v1/accounts 7500 GET Return details of all acounts
Products /api/v1/products/{id} 7501 GET Return detail of specified product
Products /api/v1/products 7501 GET Return details of all products
Orders /api/v1/orders/{id} 7502 GET Return detail of order
Orders /api/v1/orders 7502 GET Return details of orders
Backoffice /api/v1/backoffice/orders 7503 GET Return orders with product name and account name

Gateways

Service EndPoint
Accounts /account/api/v1/accounts/{id}
Accounts /account/api/v1/accounts
Products /product/api/v1/products/{id}
Products /product/api/v1/products
Orders /order/api/v1/orders/{id}
Orders /order/api/v1/orders
Backoffice /backoffice/api/v1/backoffice/orders

URI for gateway : http://localhost:8762

Used Netflix OSS:

  • Netflix Eureka is used for discovery service.
  • Netflix Ribbon is used for client side load-balancing.
  • Netflix Zuul is used for gateway.

Distributed Tracing:

  • Sleuth and Zipkin

You can open Zipkin : http://localhost:9411 Zipkin Filter Zipkin Full Trace

Used ELK STACK:

  • ElasticSearch is on 6972 port
  • Logstash TCP is on 5000 port
  • Kibana is on 5601 port

Open kibana with http://localhost:5601/. You must define an index pattern (taner-*) on Management/Stack Management.

Kibana

Used Grafana

You can open Grafana : http://localhost:3000/ Predefined dashboard : http://localhost:3000/d/dLsDQIUnzb/spring-boot-observability?orgId=1&refresh=5s

Grafana has loki for log aggregation and tempo for distributed tracing backend.

Build & Run

  • >mvn clean package : to build
  • >docker-compose up --build : build docker images and containers and run containers
  • >docker-compose stop : stop the dockerized services
  • Each maven module has a Dockerfile.

In docker-compose.yml file:

  • Accounts Service : 2222 port is mapped to 7500 port of host
  • Products Service : 2222 port is mapped to 7501 port of host
  • Orders Service : 2222 port is mapped to 7502 port of host
  • Backoffice Service : 2222 port is mapped to 7503 port of host
  • Eureka Discovery Service : 8761 port is mapped to 8761 port of host
  • Spring Boot (/ Zuul) Gateway Service : 8762 port is mapped to 8762 port of host

KUBERNETES

  • kubectl create -f containerized-accounts/k8n/deployment.yml

  • kubectl create -f containerized-accounts/k8n/service.yml

  • kubectl port-forward svc/containerized-accounts 7500:7500

  • curl localhost:7500/account/api/v1/accounts

  • kubectl create -f containerized-products/k8n/deployment.yml

  • kubectl create -f containerized-products/k8n/service.yml

  • kubectl port-forward svc/containerized-products 7501:7501

  • curl http://localhost:7501/product/api/v1/products

  • kubectl create -f containerized-orders/k8n/deployment.yml

  • kubectl create -f containerized-orders/k8n/service.yml

  • kubectl port-forward svc/containerized-orders 7502:7502

  • curl localhost:7502/order/api/v1/orders

  • kubectl create -f containerized-main/k8n/deployment.yml

  • kubectl create -f containerized-main/k8n/service.yml

  • kubectl port-forward svc/containerized-main 7503:7503

  • curl localhost:7503/backoffice/api/v1/backoffice/orders

  • kubectl create -f containerized-discovery/k8n/deployment.yml

  • kubectl create -f containerized-discovery/k8n/service.yml

  • kubectl port-forward svc/discovery 8761:8761

  • kubectl create -f containerized-gateway/k8n/deployment.yml

  • kubectl create -f containerized-gateway/k8n/service.yml

  • kubectl port-forward svc/gateway 8762:8762

  • curl localhost:8762/backoffice/api/v1/backoffice/orders

VERSIONS

2.0.2

  • feign-micrometer dependency and Capability bean added to send trace-id on resttemplate calls

      @Bean
      public Capability capability(final MeterRegistry registry) {
        return new MicrometerCapability(registry);
      }
    
      <dependency>
      	<groupId>io.github.openfeign</groupId>
      	<artifactId>feign-micrometer</artifactId>
      </dependency>
    
  • micrometer-tracing-bridge-brave added to generate trace-id and span-id

      <dependency>
          <groupId>io.micrometer</groupId>
          <artifactId>micrometer-tracing-bridge-brave</artifactId>
      </dependency>
    
  • Integrate Grafana OSS : Grafana, Loki, Tempo

2.0.1

  • Update Spring-Boot version to 3.2.1
  • Start to use micrometer tracing
  • Zipkin will be replaced by Grafana

2.0.0

  • Add kubernetes yaml files (still using Eureka discovery)

1.3.0

  • Update Spring Boot version to 2.5.1
  • Switch to Spring Boot Gateway

1.2.0

  • Sleuth and Zipkin Integration
  • Making some refactorings
  • Lombok Integration

1.1.0

  • ElasticSearch, Kibana, Logstash integration

1.0.0 SNAPSHOT

  • Spring-Boot 2.3.1.RELEASE
  • Java 11
  • Docker Image updated
  • Spring-Cloud artifacts have been changed
  • Open Feign integrated

0.0.1

  • Spring-Boot 2.0.2.RELEASE
  • Java 8

RESOURCES

Open Source Agenda is not affiliated with "Spring Boot Microservice Eureka Zuul Docker Gateway Kubernetes" Project. README Source: tanerdiler/spring-boot-microservice-eureka-zuul-docker-gateway-kubernetes

Open Source Agenda Badge

Open Source Agenda Rating