目錄
Ribbon
Ribbon主要負責負載均衡調用,是基於Netflix Ribbon實現的一套客戶端。主要功能是提供客戶端的軟件負載均衡算法和服務調用。Ribbon會自動的幫助你基於某種規則去連這些機器。
簡單來說 ribbon = 負載均衡 + restTemplate
一、Ribbon本地負載均衡 與 Nginx服務端負載均衡 區別
Nginx是服務器負載均衡,集中式負載均衡,客戶端的所有請求都會交給nginx,然后由nginx實現轉發請求。即負載均衡是由服務端實現的。
Ribbon本地負載均衡,進行內負載均衡,在調用為服務接口的時候,會在注冊中心上獲取信息服務列表之后緩存到JVM本地,從而在本地實現RPC遠程服務調用技術。
二、Ribbon工作步驟
Ribbon在工作時分成兩步:
- 第一步先選擇EurekaServer,它優先選擇在同一個區域內負載較少的server
- 第二部再根據用戶指定的策略,從server取到的服務注冊列表中選擇一個地址。
Ribbon就是一個軟負載均衡的客戶端組件,它可以和其他所需請求的客戶端結合使用,和eureka結合只是其中的一個實例。
三、Ribbon調用服務
3.1、設置服務端集群:
eureka-client、eureka-client2
eureka-client2就是 eureka-client的復制版,注意端口號要更改。
在eureka-client中編寫controller,用於服務調用測試。
@RestController
public class ClientController {
@Value("${server.port}")
private String port;
@ResponseBody
@RequestMapping("/port")
public String getPort(){
return port;
}
}
3.2、客戶端
3.2.1、編寫配置類
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
3.2.2、編寫controller
@RestController
public class ConsumerController {
@Resource
private RestTemplate restTemplate;
private static final String URL = "http://EUREKA-CLIENT";
@RequestMapping("/consumer/port")
@ResponseBody
public String getPort() {
return restTemplate.getForObject(URL + "/port", String.class);
}
}
4、測試
啟動eureka-server、eureka-client、eureka-client2、eureka-consumer。
訪問localhost:8001/port進行自測。
訪問localhost:8002/port進行自測。
自測成功后,不停訪問localhost:7001/consumer/port。
發現端口號會變更,說明Ribbon負載均衡已生效。