SpringCloud微服務中使用RestTemplate+Ribbon實現負載均衡(實現方法+實現原理+替換負載均衡策略)
前言:首先我們需要來了解一下什麼是ribbon?
Spring Cloud Ribbon是基於NetFlix Ribbon實現的一套客戶端負載均衡的工具。簡單的說,Ribbon是Netflix釋出的開源專案,主要功能是提供客戶端的軟體負載均衡演算法和服務呼叫。Ribbon客戶端元件提供一系列完善的配置項如連線超時,重試等。簡單的說,就是在配置檔案中列出Load Balancer(簡稱LB)後面所有的機器,Ribbon會自動的幫準基於某種規則(如簡單輪詢,隨機連線等)去連線這些機器。我們很容易使用Ribbon實現自定義的負載均衡演算法。
以下介紹RestTemplate+Ribbon負載均衡的實現過程,本示例專案結構:
springcloud_demo
:專案名稱eureka-server-7001
:7001埠啟動的eurekaprovider-8001
:8001埠啟動的服務提供者provider-8002
:8002埠啟動的服務提供者consumer
:服務消費者
說明:本篇部落格主要講RestTemplate+Ribbon負載均衡實現過程,沒有說明詳細專案建立步驟,如果對SpringCloud專案構建以及消費者叢集有疑問的小夥伴,請參照我的另外兩篇部落格:使用Idea構建SpringCloud專案 和 SpringCloud微服務中Eureka叢集與服務提供者叢集的實現
文章目錄
一。RestTemplate+Ribbon負載均衡的實現
1.匯入依賴
在pom.xml檔案中新增以下依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
值得注意的是,在新版的Eureka中已經預設整合了Ribbon,所以我們也可以不引入上一步的依賴:
如下圖所示:Eureka依賴下已存在Ribbon的依賴:
2.編碼階段
編寫RestTemplate配置類,使用@Configuration
註解將RestTemplate注入到Spring容器中:
@Configuration
public class RestTemplateConfig {
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
}
編寫呼叫服務提供者模組介面程式碼:
@Service
public class ProviderTemplate {
@Autowired
private RestTemplate restTemplate;
public String getInfoByTemplate() {
//呼叫子模組介面地址
String name = restTemplate.getForObject("http://service-provider/provider/getInfo", String.class);
return name;
}
}
服務提供者8001介面詳情:
服務提供者8002介面詳情:
控制類程式碼:
@RequestMapping("consumer")
@RestController
public class ConsumerController {
@Autowired
private ProviderTemplate providerTemplate;
@RequestMapping("getInfoByTemplate")
public String getInfoByTemplate(){
return providerTemplate.getInfoByTemplate();
}
3.測試階段
依次啟動,訪問:http://localhost:8777/consumer/getInfoByTemplate,重新整理數次,發現8001,8002埠輪詢的在提供服務:
到這裡,基於RestTemplate+Ribbon的簡單負載均衡就已經實現了。
二。負載均衡實現原理
預設輪詢演算法原理
三。替換負載均衡策略
1.常用的幾種負載均衡策略
名稱以及解釋:
關係圖:
2.替換策略
這裡我們把預設的輪詢方式改為隨機的方式,首先我們需要注意IRule介面
,這個是實現負載均衡方式的介面,其原始碼如下:
我們需要再新建一個配置類實現IRule介面
去配置我們的Ribbon負載均衡方式,特別需要注意的是,但是這裡需要注意一個問題:
點開啟動類中的@SpringBootApplication
註解,其原始碼中包含了@ComponentScan
註解,瞭解到該配置類不能和啟動類在同一個包或者該包的子包下:
新建一個名叫rule的包,再新建一個MySelfRule自定義負載均衡方式類:
MySelfRule配置類程式碼如下:
@Configuration
public class MySelfRule {
@Bean
public IRule myRule() {
return new RoundRobinRule();// 定義為隨機
}
}
最後在啟動類中加上@RibbonClient
註解,指定ribbon負載均衡自定義更換策略:
3.重新測試
重新依次啟動並測試,你會發現8001,8002出現的概率是隨機分佈的了,而不是你一下我一下這樣的輪詢方式出現了:
相關文章
- Ribbon實現負載均衡負載
- GRPC 負載均衡實現RPC負載
- nginx實現負載均衡Nginx負載
- 使用YARP來實現負載均衡負載
- SpringCloud Fegin結合Ribbon實現負載均衡SpringGCCloud負載
- Nginx如何實現負載均衡釋出策略?Nginx負載
- HaProxy 實現 MySQL 負載均衡MySql負載
- 伺服器負載均衡原理及實現伺服器負載
- 在Linux中,如何實現負載均衡?Linux負載
- nginx+tomcat實現負載均衡NginxTomcat負載
- dubbo(三):負載均衡實現解析負載
- Python實現簡單負載均衡Python負載
- 微服務架構如何實現客戶端負載均衡微服務架構客戶端負載
- nginx實現兩臺服務負載均衡Nginx負載
- SAP 應用服務負載均衡的實現負載
- Nginx實現簡單的負載均衡Nginx負載
- Haproxy搭建 Web 群集實現負載均衡Web負載
- Nginx如何實現四層負載均衡?Nginx負載
- Keepalived實現Nginx負載均衡高可用Nginx負載
- Docker Compose+nginx實現負載均衡DockerNginx負載
- orleans叢集及負載均衡實現負載
- Spring Cloud:使用 Feign 實現負載均衡詳解SpringCloud負載
- 在 kubernetes 環境中實現 gRPC 負載均衡RPC負載
- 使用LVS實現負載均衡原理及安裝配置詳解負載
- SpringCloud微服務實戰——搭建企業級開發框架(十二):OpenFeign+Ribbon實現負載均衡SpringGCCloud微服務框架負載
- jmeter壓力測試實現負載均衡JMeter負載
- nginx讓多個tomcat實現負載均衡NginxTomcat負載
- RHEL 7配置HAProxy實現Web負載均衡Web負載
- LVS+Keepalived 實現高可用負載均衡負載
- haporxy+keepalived實現負載均衡+高可用負載
- .Net微服務實戰之負載均衡(上)微服務負載
- .Net微服務實戰之負載均衡(下)微服務負載
- 自適應負載均衡演算法原理與實現負載演算法
- Spring Cloud:使用Ribbon實現負載均衡詳解(上)SpringCloud負載
- Spring Cloud:使用Ribbon實現負載均衡詳解(下)SpringCloud負載
- 超實用:實現負載均衡技術的方式負載
- gRPC負載均衡(自定義負載均衡策略)RPC負載
- ③SpringCloud 實戰:使用 Ribbon 客戶端負載均衡SpringGCCloud客戶端負載