5. Ribbon负载均衡服务调用
概述
-
LB(负载均衡)
-
集中式LB
-
进程内LB
Ribbon负载均衡演示
-
架构
总结:Ribbon其实就是一个软负载均衡的客户端组件,他可以和其他所需请求的客户端结合使用,和eureka结合只是其中的一个实例。
-
POM
-
二说RestTemplate的使用:负载均衡+RestTemplate调用
-
getForObject方法/getForEntity方法
-
postForObject/postForEntity
-
Ribbon核心组件IRule
-
IRule:根据特定算法从服务列表中选取一个要访问的服务
- com.netflix.loadbalancer.RoundRobinRule:轮询
- com.netflix.loadbalancer.RandomRule:随机
- com.netflix.loadbalancer.RetryRule:先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重试
- WeightedResponseTimeRule :对RoundRobinRule的扩展,响应速度越快的实例选择权重越大,越容易被选择
- BestAvailableRule :会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
- AvailabilityFilteringRule :先过滤掉故障实例,再选择并发较小的实例
- ZoneAvoidanceRule:默认规则,复合判断server所在区域的性能和server的可用性选择服务器
-
替换
-
修改cloud-consumer-order80
-
注意配置细节
-
新建package:com.atguigu.myrule
-
上面包下新建MySelfRule规则类
package com.atguigu.myrule; import com.netflix.loadbalancer.IRule; import com.netflix.loadbalancer.RandomRule; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MySelfRule { @Bean public IRule myRule(){ return new RandomRule();//定义为随机 } }
-
主启动类添加@RibbonClient
@EnableEurekaClient @SpringBootApplication @RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration = MySelfRule.class) public class OrderMain80 { public static void main(String[] args) { SpringApplication.run(OrderMain80.class,args); } }
-
测试
-
Ribbon负载均衡算法
- 原理
- RoundRobinRule源码