Skip to content

tanerdiler/spring-boot-microservice-eureka-zuul-docker-gateway-kubernetes

Repository files navigation

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

About

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

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published