使用Ribbon做Spring Cloud Alibaba負載均衡
阿新 • • 發佈:2021-10-04
使用Ribbon做負載均衡
概念
Ribbon不需要cloud-Alibaba的元件 但是預設也會被匯入進去 預設採用輪詢優化負載均衡 使用方式也很簡單
簡單使用
在之前的RestTemplte配置加上註解@LoadBalanced
即可匯入ribbon
@Configuration
public class ConsumerConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
有了ribbon後我們呼叫服務就非常簡單了
@GetMapping("/getPort") public String getPort(){ return this.restTemplate.getForObject("http://provider/getPort",String.class); }
測試時會發現8081 8082兩個服務會輪流被使用 即輪詢演算法
配置ribbon使用其他的演算法
隨機演算法
在yml加上配置程式碼即可
provider:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
基於權重的演算法
編寫配置檔案
provider:
ribbon:
NFLoadBalancerRuleClassName: com.jie.config.NacosWeightedRul
實現對應類
@Slf4j public class NacosWeightedRul extends AbstractLoadBalancerRule { @Autowired private NacosDiscoveryProperties nacosDiscoveryProperties; @Override public void initWithNiwsConfig(IClientConfig iClientConfig) { //讀取配置檔案 } @Override public Server choose(Object o) { ILoadBalancer loadBalancer = this.getLoadBalancer(); BaseLoadBalancer baseLoadBalancer = (BaseLoadBalancer) loadBalancer; //獲取微服務名稱 String name = baseLoadBalancer.getName(); //獲取服務發現相關的API NamingService namingService = nacosDiscoveryProperties.namingServiceInstance(); try { Instance instance = namingService.selectOneHealthyInstance(name); log.info("選擇的例項是port={},instance={}",instance.getPort(),instance); return new NacosServer(instance); } catch (NacosException e){ return null; } } }
在nacos我們吧8082服務權重加大
測試使用可以發現基本大部分都是在使用8082服務