springCloud微服务组件Ribbon(客户端负载均衡)
- 简化RestTemplate
在初始化RestTemplate的时候加上注解@LoadBalanced
@Configuration
public class RestTemplateConfig {
@LoadBalanced
@Bean
public RestTemplate get(){
return new RestTemplate();
}
}
controller层改进,不用使用DiscoveryClient获得实例集合,再获取集合对应的实例,直接在url地址上写上对应提供方的实例名,就可完成远程调用
@RequestMapping("/hello")
public String hello(){
/* List<ServiceInstance> instances = discoveryClient.getInstances("NACOS-PROVIDER");
ServiceInstance serviceInstance = instances.get(0);
String host = serviceInstance.getHost();
int port = serviceInstance.getPort();*/
String url = "http://NACOS-PROVIDER/hello/hello";
String s = restTemplate.getForObject(url, String.class);
return s;
}
- 负载均衡策略
默认轮询:相同的三个提供方,消费方则会通过轮询的方式先调用1,以此类推
常见的策略
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tz55KWw8-1598770969151)(C:\Users\gwx\AppData\Roaming\Typora\typora-user-images\image-20200829191647553.png)]
改变ribbon默认的负载均衡策略
代码方式:
1.创建一个配置类将策略加载到容器当中
@Configuration
public class MyRule {
@Bean
public IRule getRule(){
return new RandomRule();
}
}
2.告诉启动类对哪个服务节点进行对应的策略,在启动类上加上注解@RibbonClient,name属性是提供节点的名字,configuration属性是指定负载均衡的策略
@RibbonClient(name = "NACOS-PROVIDER",configuration = MyRule.class)
配置文件方式:
#配置文件的方式设置ribbon负载均衡策略
#指定对哪个服务节点进行负载均衡策略
NACOS-PROVIDER:
# 固定写法
ribbon:
# 固定写法 指定对应策略的全限定类名
NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
名
NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule