spring cloud 学习(Ribbon)
Ribbon 是一个基于Http和Tcp的客户端负载均衡工具,主要有2个功能: 1.简化远程调用 2. 负载均衡
服务端负载均衡:
负载均衡算法在服务端
由负载均衡器维护服务地址列表
客户端负载均衡
负责均衡算法在客户端
客户端维护服务地址列表
Ribbon可以简化RestTemplate的远程调用
步骤:1.在定义RestTemplate的时候添加@LoadBalanced注解(该注解就集成了负载均衡)
1 @Bean 2 @LoadBalanced 3 public RestTemplate restTemplate() { 4 return new RestTemplate(); 5 }
2.这时候就可以直接在controller的url中直接书写 服务名称
@GetMapping("/goods2/{id}") public Goods findGoodsById2(@PathVariable("id") int id){ String url= "http://EUREKA-PROVIDER/goods/findOne/"+id; //远程调用Goods服务中的findOne接口 Goods goods = restTemplate.getForObject(url, Goods.class); return goods; }
负载均衡策略:
随机: RandomRule
轮询: RoundRobinRule
最小并发: BestAvailableRule
过滤: AvaliabilityFilteringRule
响应时间: WeightedResponseRule
轮询重试: RetryRule
性能可用性: ZoneAvoidanceRule
Ribbon默认使用轮询策略
如何修该 Ribbon 负载均衡策略
方式一:代码方式
定义一个配置类,返回一个负载均衡的策略
1 @Configuration 2 public class MyRule{ 3 4 @Bean 5 public IRule rule(){ 6 7 return new RandomRule();//负载均衡策略 8 } 9 }
启动类上添加@RibbonClient注解 注解里面需要设置 服务提供方的 应用名称 以及负载均衡的bean
@RibbonClient(name=“EUREKA-PROVIDER”,configuration = MyRule.class)
方式二:配置的方式设置负载均衡策略
1 EUREKA-PROVIDER: #设置服务提供方的 应用名称 2 ribbon; 3 NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule 4 #策略类的全限定类名
设置ribbon的超时时间
1 # 设置Ribbon的超时时间 2 3 ribbon: 4 5 ConnectTimeout: 1000 # 连接超时时间 默认1s 默认单位毫秒 6 7 ReadTimeout: 3000 # 逻辑处理的超时时间 默认1s 默认单位毫秒