SpringCloud--05、負載均衡Robbin
阿新 • • 發佈:2018-12-11
1、Robbin概述
Robbin是 Netflixfa 釋出的一個負載均衡器、SpringCloud 中,Eureka一般配合Ribbon進行使用,Ribbon提供了客戶端負載均衡的功能
負載均衡策略:
(1) 簡單輪詢負載均衡
(2) 加權響應時間負載均衡
(3) 區域感知輪詢負載均衡
(4) 隨機負載均衡
2、例項演示
首先我們啟動三個user-service例項,一個8081,一個8082 、一個8083
以相同的方法建立二個user-service
建立好後:
Eureka監控面板:
開啟負載均衡:
因為Eureka中已經集成了Ribbon,所以我們無需引入新的依賴。直接修改程式碼
在Customer-service的RestTemplate的配置方法上新增@LoadBalanced
註解:
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate(new OkHttp3ClientHttpRequestFactory());
}
修改呼叫方式,不再手動獲取ip和埠,而是直接通過服務名稱呼叫:
@Service public class UserService { @Autowired private RestTemplate restTemplate; @Autowired private DiscoveryClient discoveryClient; public List<User> queryUserByIds(List<Long> ids) { List<User> users = new ArrayList<>(); // 地址直接寫服務名稱即可 //根據service名稱,獲取到了服務例項的ip和埠。它就是LoadBalancerInterceptor String baseUrl = "http://user-service/user/"; ids.forEach(id -> { // 我們測試多次查詢, users.add(this.restTemplate.getForObject(baseUrl + id, User.class)); // 每次間隔500毫秒 try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } }); return users; } }
訪問:
根據service名稱,獲取到了服務例項的ip和埠。LoadBalancerInterceptor處理對映service名和ip+埠號
使用 RibbonLoadBalanceClient來進行負載均衡(負載均衡演算法處理)