SpringCloud之LoadBalancer負(fù)載均衡服務(wù)調(diào)用過(guò)程
前言
LoadBalancer是Ribbon的未來(lái)替換方案
一、LoadBalancer是什么?
LB負(fù)載均衡(Load Balance)是什么
- 簡(jiǎn)單的說(shuō)就是將用戶的請(qǐng)求平攤的分配到多個(gè)服務(wù)上,從而達(dá)到系統(tǒng)的HA(高可用)
- 常見(jiàn)的負(fù)載均衡有軟件Nginx,LVS,硬件 F5等
spring-cloud-starter-loadbalancer組件是什么
- Spring Cloud LoadBalancer是由SpringCloud官方提供的一個(gè)開(kāi)源的、簡(jiǎn)單易用的客戶端負(fù)載均衡器,它包含在SpringCloud-commons中用它來(lái)替換了以前的Ribbon組件。
- 相比較于Ribbon,SpringCloud LoadBalancer不僅能夠支持RestTemplate,還支持WebClient(WeClient是Spring Web Flux中提供的功能,可以實(shí)現(xiàn)響應(yīng)式異步請(qǐng)求)
官網(wǎng):http://docs.spring.io/spring-cloud-commons/reference/spring-cloud-commons/loadbalancer.html
客戶端負(fù)載和服務(wù)端負(fù)載區(qū)別:
- Nginx是服務(wù)器負(fù)載均衡,客戶端所有請(qǐng)求都會(huì)交給nginx,然后由nginx實(shí)現(xiàn)轉(zhuǎn)發(fā)請(qǐng)求,即負(fù)載均衡是由服務(wù)端實(shí)現(xiàn)的。
- loadbalancer本地負(fù)載均衡,在調(diào)用微服務(wù)接口時(shí)候,會(huì)在注冊(cè)中心上獲取注冊(cè)信息服務(wù)列表之后緩存到JVM本地,從而在本地實(shí)現(xiàn)RPC遠(yuǎn)程服務(wù)調(diào)用技術(shù)。
二、使用步驟
1、啟動(dòng)consul
詳見(jiàn):SpringCloud--consul服務(wù)注冊(cè)與發(fā)現(xiàn)、配置管理、配置持久化
2、客戶端加入依賴
<!--loadbalancer-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>3、以服務(wù)名稱調(diào)用
public static final String PaymentSrv_URL = "http://cloud-payment-service";//服務(wù)注冊(cè)中心上的微服務(wù)名稱
@GetMapping(value = "/consumer/pay/get/info")
private String getInfoByConsul(){
return restTemplate.getForObject(PaymentSrv_URL + "/pay/get/info", String.class);
}用restTemplate調(diào)用服務(wù)時(shí),使用服務(wù)名稱調(diào)用后,在consul中注冊(cè)相同服務(wù)名稱的的服務(wù)會(huì)通過(guò)loadbalancer實(shí)現(xiàn)負(fù)載均衡,使得每個(gè)相同服務(wù)名稱的服務(wù)被訪問(wèn)的次數(shù)平均。
三、負(fù)載均衡算法替換
1、 默認(rèn)算法輪詢(相同服務(wù)名下的所有服務(wù)枚舉調(diào)用)
- restTemplate配置:
@Configuration
public class RestTemplateConfig {
@Bean
@LoadBalanced //按服務(wù)名稱調(diào)用時(shí)默認(rèn)負(fù)載均衡 要加上該注解支持負(fù)載均衡
public RestTemplate restTemplate(){
return new RestTemplate();
}
}2、替換隨機(jī)算法(相同服務(wù)名下的所有服務(wù)隨機(jī)調(diào)用)
- restTemplate配置:
@Configuration
@LoadBalancerClient(
//下面的value值大小寫(xiě)一定要和consul里面的名字一樣,必須一樣
value = "cloud-payment-service",configuration = RestTemplateConfig.class)
public class RestTemplateConfig
{
@Bean
@LoadBalanced //使用@LoadBalanced注解賦予RestTemplate負(fù)載均衡的能力
public RestTemplate restTemplate(){
return new RestTemplate();
}
@Bean
ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
LoadBalancerClientFactory loadBalancerClientFactory) {
String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);
}
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?Security短信驗(yàn)證碼實(shí)現(xiàn)詳解
本文主要介紹了Spring?Security短信驗(yàn)證碼的實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-11-11
SpringBoot整合Spring Data Elasticsearch的過(guò)程詳解
這篇文章主要介紹了SpringBoot整合Spring Data Elasticsearch的過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
Java?Stream?流中?Collectors.toMap?的用法詳解
這篇文章主要介紹了Stream?流中?Collectors.toMap?的用法,Collectors.toMap()方法是把List轉(zhuǎn)Map的操作,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-01-01
通過(guò)代碼實(shí)例深入解析Java重寫(xiě)和重載
這篇文章主要介紹了通過(guò)代碼實(shí)例深入解析Java重寫(xiě)和重載,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
SpringBoot+Mybatis-plus實(shí)現(xiàn)分頁(yè)查詢的示例代碼
本文主要介紹了SpringBoot+Mybatis-plus實(shí)現(xiàn)分頁(yè)查詢的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02
基于Spring Boot保護(hù)Web應(yīng)用程序
這篇文章主要介紹了基于Spring Boot保護(hù)Web應(yīng)用程序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
knife4j3.0.3整合gateway和注冊(cè)中心的詳細(xì)過(guò)程
這篇文章主要介紹了knife4j3.0.3整合gateway和注冊(cè)中心的詳細(xì)過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03

