目錄
- 介紹
- 核心功能
- 負載均衡
- 啟動兩個支付服務
- 訂單模塊引入依賴
- @LoadBalanced 注解
- 啟動訂單服務
- 測試結果
- 負載均衡算法切換
- 總結
介紹
Spring Cloud LoadBalancer 是 Spring Cloud 提供的客戶端負載均衡解決方案,提供更現代化的 API 和更好的 Spring 生態系統集成。它支持微服務架構中服務調用的負載均衡,適用于分布式系統中的流量分發和故障轉移。
核心功能
客戶端負載均衡
- 在客戶端實現負載均衡邏輯,無需服務端代理。
- 支持基于服務名的調用 (如 http://service-name),自動解析服務實例列表。
多種負載均衡策略
- 默認支持 輪詢 (Round Robin) 和隨機 (Random) 策略。
- 可自定義實現其他策略 (如加權輪詢、最小連接數等)。
服務發現集成
- 與 Spring Cloud 服務發現組件 (如 Eureka、Consul、Nacos) 無縫集成。
- 動態獲取服務實例列表,支持實例上下線自動更新。
響應式支持
- 支持阻塞式 (BlockingLoadBalancerClient) 和非阻塞式 (ReactiveLoadBalancer) 請求處理。
- 可與 RestTemplate 和 WebClient 配合使用。
高可用與容錯
- 內置重試機制 (如 spring.cloud.loadbalancer.retry.enabled=true)。
- 支持健康檢查,自動剔除故障實例。
配置靈活性
- 通過 application.yml 或 application.properties 配置行為。
- 支持自定義負載均衡算法和規則。
負載均衡
啟動兩個支付服務
分別啟動兩個支付服務,端口8001和8002。
訂單模塊引入依賴
<!-- SpringCloud loadbalancer -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
@LoadBalanced 注解
給 RestTemplate 標注 @LoadBalanced 注解,在客戶端實現負載均衡功能。
@Configuration
public class RestTemplateConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}
}
啟動訂單服務
啟動訂單服務,端口9001。
@GetMapping("/order/pay/getInfoByConsul")
public String getInfoByConsul() {return restTemplate.getForObject(payment_url + "/pay/getInfoByConsul", String.class);
}
測試結果
當調用9001訂單接口 http://localhost:9001/order/pay/getInfoByConsul ,會輪詢調用8001和8002獲取 consul 配置信息。
負載均衡算法切換
負載均衡算法默認有兩種:
- 輪詢: RoundRobinLoadBalancer
- 隨機: RandomLoadBalancer
算法切換
從默認的輪詢,切換為隨機算法。
@Configuration
// value中的服務名大小寫必須和consul服務名一樣
@LoadBalancerClient(value = "cloud-payment-service", configuration = RestTemplateConfig.class)
public class RestTemplateConfig {@Bean@LoadBalanced // 賦予RestTemplate負載均衡的能力public RestTemplate restTemplate(){return new RestTemplate();}@BeanReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,LoadBalancerClientFactory loadBalancerClientFactory) {String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);}
}
總結
以上主要介紹了 Spring Cloud LoadBalancer 負載均衡、算法切換的相關知識,想了解更多 Spring Cloud LoadBalancer 知識的小伙伴請參考 Spring Cloud LoadBalancer 官網 進行學習,學習更多 Spring Cloud 實戰實用技巧的小伙伴,請關注后期發布的文章,認真看完一定能讓你有所收獲。