概念
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服务