Belajar spring-cloud for microservice architecture.
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 | 
Berikut flow proxy dari service nasabah ke service wilayah:
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.
Berikut ini flow api gateway berdasarkan gambar dibawah ini:
Schenario 1
request: GET localhost:8765/nasabah_service/perorangan/10
- 
Zuul api gatewaycatch request dari browser, kemudian di-forward keeureka naming serveruntuk mencari nama service atau application name yang di register ke eureka.
- 
eurekaforward request ke localhost:7000/perorangan/10 berdasarkan application name yaitunasabah_service.
- 
Di dalam nasabah service, memanggil service lain yaitu wilayah_servicedengan menggunakan proxyfeign clientyang mereference ke servicewilayah_serviceseperti 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); } 
- 
feign clientmelakukan check status dengan menggunakanspring-boot-starter-actuatorjika statusUPmaka akan di arahkan ke service tersebut berdasarkan application namewilayah_service.
- 
Karena instance wilayah_serviceada 2 service yang berjalan yaitu di port 6000 dan 6001. Makaapi gatewayakan memilih route berdasarkan algoritmanya. Contohnya app yang di forward yaitu port 6001 maka di forward ke path localhost:6001/provinsi/32
- 
Response dikirim kembali ke feign clientberikut repsonse:{ "id": 32, "name" : "Jawa Barat" }
- 
Menerima response berupa json 
- 
forward data nasabah + data provinsi ke eureka naming server
- 
forward data nasabah + data provinsi ke api-gateway
- 
Browser mendirima data nasabah seperti berikut: { "id": 10, "provinsiTinggal": { "id": 32, "name" : "Jawa Barat" }, "namaLengkap": "Dimas Maryanto" }


