一、簡介
Ribbon是Netfix釋出的負載均衡器,它有助于控制HTTP和TCP用戶端的行為。為Ribbon配置服務提供者位址清單後,Ribbon就可基于某種負載均衡算法,自動地幫助服務消費者去請求。Ribbon預設為我們提供了很多的負載均衡算法,例如輪詢、随機等,當然,也可以為Ribbon實作自定義的負載均衡算法。
在Spring Cloud中,當Ribbon與Eureka配合使用時,Ribbon可自動從Eureka Server擷取服務提供者位址清單,并基于負載均衡算法,請求其中一個服務提供者執行個體。
二、為服務消費者整合Ribbon
2.1、引入ribbon依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
2.2、為RestTemplate添加@LoadBalanced注解(Application)
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
2.3、調用其它微服務
@GetMapping("/user/{id}")
public User findById(@PathVariable Long id) throws Exception {
ServiceInstance serviceInstance = this.loadBalancerClient.choose("spring-ribbon-eureka-client2");
// 列印目前選擇的是哪個節點
System.out.println("serviceId : " + serviceInstance.getServiceId());
System.out.println("hoost : " + serviceInstance.getHost());
System.out.println("port : " + serviceInstance.getPort());
System.out.println("============================================================");
if (null == id) {
return null;
}
return this.restTemplate.getForObject("http://spring-ribbon-eureka-client2/" + id, User.class);
}
說明:
1、spring-ribbon-eureka-client2是服務提供者注冊到Eureka Server上的應用名稱
2、本次測試開啟了兩個spring-ribbon-eureka-client2服務提供者,一個端口是8080,一個是8083
2.4、測試
通路:http://192.168.1.83:8082/user/1
效果: