Kali ini saya akan menjelaskan bagaimana cara create client load balancing dengan spring boot
Nah, apa itu load balancing?
Apa sih gunanya load balancing?
Load balancing merupakan teknik yang digunakan untuk mendistribusikan beban trafik pada dua atau lebih jalur koneksi secara seimbang, dimana gunanya agar trafik dapat berjalan secara optimal, memaksimalkan throughput serta menghindari overload pada salah satu jalur koneksi.
Untuk memulai, pertama kita create 2 project Spring Boot
- Spring Boot untuk simple restfull service, untuk project ini akan kita jalankan pada port 8090, 8091, dan 8092 (localhost:8090, localhost:8091, localhost:8092)
- Spring Boot untuk load Balancing yaitu Ribbon Client, dan untuk project ini di jalankan pada port 8080 (localhost:8080)
- Create Spring Boot Project for Simple Restfull Service
Tambah code berikut pada pom.xml<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
Kemudian buat controller untuk request mappingpackage drools.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class WebController { @Value("${server.port}") String port; @RequestMapping(value = "/") public String home() { return "Hello!"; } @RequestMapping("/greeting") public String hello() { return "Hello from a service running at port: " + port + "!"; } }
- Create Spring Boot Project for Ribbon Client
Tambah code berikut pada pom.xml<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Camden.SR5</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
Konfigurasi ribbon client pada file application.yamlspring: application: name: Ribbon-Client helloworld: ribbon: eureka: enabled: false listOfServers: localhost:8090,localhost:8091,localhost:8092 ServerListRefreshInterval: 1000 server: port: 8080
listOfServer merupakan list server untuk load balancing,
ServerListRefreshInterval merupakan waktu interval. interval yang digunakan untuk refresh ribbon service
Kemudian create satu class Configuration. config.javapackage drools.config; import com.netflix.loadbalancer.AvailabilityFilteringRule; import com.netflix.loadbalancer.IPing; import com.netflix.loadbalancer.IRule; import com.netflix.loadbalancer.PingUrl; import org.springframework.beans.factory.annotation.Autowired; import com.netflix.client.config.IClientConfig; import org.springframework.context.annotation.Bean; public class config { @Autowired IClientConfig ribbonClientConfig; @Bean public IPing ribbonPing(IClientConfig config) { return new PingUrl(); } @Bean public IRule ribbonRule(IClientConfig config) { return new AvailabilityFilteringRule(); } }
IClientConfig digunakan untuk menyimpan semua konfigurasi client yang kita define dalam code
IPing merupakan komponen yang menentukan mekanisme yang kita gunakan untuk menentukan ketersediaan server secara real-time, memeriksa server apakah masih hidup
IRule merupakan komponen logic yang menentukan aturan load balancing yang kita gunakan dalam spring boot. Dalam project ini kita menggunakan AvailabilityFilteringRule, dimana dalam aturan ini akan memilih server yang available atau yang tersedia.
Create sebuah load balancing controller WebController.javapackage drools.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController public class WebController { @LoadBalanced @Bean RestTemplate restTemplate() { return new RestTemplate(); } @Autowired RestTemplate restTemplate; @RequestMapping("/helloworld") public String home() { return this.restTemplate.getForObject("http://helloworld/greeting", String.class); } }
Dalam controller diatas, digunakan anotasi @LoadBalanced untuk konfigurasi restTemplate sebagai LoadBalancerClient. - Run and check results
- Run Restfull Service pada port 8090, 8091, 8092
mvn spring-boot:run -Dserver.port=8090
mvn spring-boot:run -Dserver.port=8092
- Kemudian run Ribbon Client
mvn spring-boot:run
dan jalankan http://localhost:8080/helloworld pada browser atau postman, dan kita akan menerima output dari service 8090, 8091, 8092
dan log akan seperti gambar diatas jika kita menjalankan service ribbon client
Namun demikian, ribbon client akan tetap berjalan dari service yang masih hidup.
Dan Jika kita mematikan semua service, kita akan menemukan pada log no up servers available
Oke, sekian penjelasan saya, semoga bermanfaat
Terima kasih
No comments:
Post a Comment