Coder Social home page Coder Social logo

dimmaryanto93 / springboot2-cloud-example Goto Github PK

View Code? Open in Web Editor NEW
5.0 2.0 2.0 4.45 MB

Belajar spring-cloud v2.0

Java 100.00%
springboot2 spring-cloud spring-cloud-config-git spring-microservices netflix-eureka netflix-zuul feign-client netflix-ribbon spring-cloud-microservice

springboot2-cloud-example's Introduction

Spring Cloud Example

Belajar spring-cloud for microservice architecture.

Architecture spring-cloud

arch spring-cloud

Configuring runtime

application name the ports binding
config-server localhost:8888
sample-service localhost:8080
wilayah-service localhost:7000,7001...
nasabah-service localhost:6000,6001,6002...
eureka-naming-server localhost:8671
zuul api-gateway localhost:8765

Proxy with feign & ribbon

Berikut flow proxy dari service nasabah ke service wilayah:

proxy dengan ribbon

Biasya kalau kita call rest-api harus menanamkan url contohnya http://localhost:8080/api/** atau lain-lain. Nah itu hanya bekerja klo untuk satu service aja kalo ada ratusan service ??? how we can do that?

Dengan menggunakan fitur spring-cloud-starter-netflix-eureka-server kita bisa membuat proxy dengan multiple instance, kemudian untuk memanggil rest dengan menggunakan spring-cloud-starter-openfeign, spring-cloud-starter-netflix-ribbon dan spring-cloud-starter-netflix-eureka-client kita tidak perlu meng-hardcode lagi url tetapi hanya dengan menggunakan memanggilnya melalu ${spring.application.name} contoh implementasi di nasabah service seperti berikut:

@FeignClient(name = "wilayah-service")
@RibbonClient("wilayah-service")
public interface WilayahProxy {

    @GetMapping("/provinsi/{id}")
    ResponseEntity<Provinsi> provinsiById(@PathVariable("id") Long provinsiId);
}

Akan secara langsung di forward ke service wilayah.

Api gateway with netflix-zuul

Berikut ini flow api gateway berdasarkan gambar dibawah ini:

zuul api gateway

Schenario 1

request: GET localhost:8765/nasabah_service/perorangan/10

  1. Zuul api gateway catch request dari browser, kemudian di-forward ke eureka naming server untuk mencari nama service atau application name yang di register ke eureka.

  2. eureka forward request ke localhost:7000/perorangan/10 berdasarkan application name yaitu nasabah_service.

  3. Di dalam nasabah service, memanggil service lain yaitu wilayah_service dengan menggunakan proxy feign client yang mereference ke service wilayah_service seperti berikut penggalan codenya:

    @FeignClient(name = "api-gateway-zuul")
    @RibbonClient(name = "wilayah-service")
    public interface WilayahProxy {
    
        @GetMapping("/wilayah-service/provinsi/{id}")
        ResponseEntity<Provinsi> provinsiById(@PathVariable("id") Long provinsiId);
    }
  4. feign client melakukan check status dengan menggunakan spring-boot-starter-actuator jika status UP maka akan di arahkan ke service tersebut berdasarkan application name wilayah_service.

  5. Karena instance wilayah_service ada 2 service yang berjalan yaitu di port 6000 dan 6001. Maka api gateway akan memilih route berdasarkan algoritmanya. Contohnya app yang di forward yaitu port 6001 maka di forward ke path localhost:6001/provinsi/32

  6. Response dikirim kembali ke feign client berikut repsonse:

    {
     "id": 32,
     "name" : "Jawa Barat"
    }
  7. Menerima response berupa json

  8. forward data nasabah + data provinsi ke eureka naming server

  9. forward data nasabah + data provinsi ke api-gateway

  10. Browser mendirima data nasabah seperti berikut:

    {
      "id": 10,
      "provinsiTinggal": {
          "id": 32,
          "name" : "Jawa Barat"
      }, 
      "namaLengkap": "Dimas Maryanto"
    }

springboot2-cloud-example's People

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.