1. 程式人生 > >SpringCloud--05、負載均衡Robbin

SpringCloud--05、負載均衡Robbin

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來進行負載均衡(負載均衡演算法處理)