ribbo:是Netflix公司开源的一个负载均衡的项目,是一个客户端负载均衡器,运行在客户端上。
实际运用案例(基于springcloud入门案例):
一、新建Module:springcloud-consumer-ribbon
1:添加依赖
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-devtools
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-starter-netflix-ribbon
org.springframework.boot
spring-boot-starter-actuator
2:修改配置文件(在src/main/resources下创建application.yml文件):
①配置端口号:
server:
port: 6001
②配置注册中心eureka:
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
instance:
instance-id: consumer6001
prefer-ip-address: true
spring:
application:
name: consumer1
3:启动类(App):
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
@RibbonClients
@Configuration
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
3、控制器(UserController):
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/hi")
public Map hello(){
return restTemplate.getForObject("http://provider-one/hello", Map.class);
}
provider-one:是你提供者配置文件中spring.application.name的值
hello:是你提供者的提供的方法名字。
提供的负载均衡算法:
RoundRobinRule(轮询算法):对所有服务器轮流访问
RandomRule(随机算法) :随机选择服务器
RetryRule():先按照RoundRobinRule的策略获取服务,如果获取失败则在制定时间内进行重试,获取可用的服务。
AvailabilityFilteringRule():会先过滤由于多次访问故障而处于断路器跳闸状态的服务,还有并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问
WeightedResponseTimeRule():根据平均响应的时间计算所有服务的权重,响应时间越快服务权重越大被选中的概率越高,刚启动时如果统计信息不足,则使用RoundRobinRule策略,等统计信息足够会切换到WeightedResponseTimeRule
BestAviableRule():会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
ZoneAvoidanceRule():默认规则,符合判断server所在区域的性能和server的可用性选择服务器
修改负载均衡算法(2种):
添加一个方法:
IRule loadBalanceRule(){
return new RandomRule();
}
修改配置文件:
MICRO-SERVICE:服务名字
ribbon:
NFLoadBanlanceRuleClassName:
实现负载均衡:
启动多个提供者(端口号不一致)