《SpringCloud微服务 四》之 Ribbon 负载均衡
四、ribbon 负载均衡
Ribbon是一个客户端的负载均衡器,它决定选择哪一台机器来调用远程服务,对于多应用实例
1.添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
2.添加配置
server:
port: 8081
spring:
application:
name: user-service
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8080/eureka
3.在启动类上添加开启 负载均衡 客户端注解 @RibbonClient
@SpringBootApplication
@EnableEurekaClient
// 开启负载均衡
@RibbonClient
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}
4.对 RestTemplate添加 负载均衡 @LoadBalanced 注解
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
这样就可以对 RestTemplate 进行负载均衡 调用服务
5.控制器 负载均衡调用服务
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private RestTemplate restTemplate ;
@GetMapping("/book")
public BookVo getBook() {
String url = "http://BOOKS-SERVICE/book" ;
return restTemplate.getForObject(url, BookVo.class);
}
}
当调用 BOOKS-SERVICE 服务时,会去eureka服务注册中心获取具体的IP地址进行请求,当有多个实例时,ribbon会实现负载均衡的去调用服务
4.1 负载均衡策略
ribbon 默认是采用的 轮询调度策略 RoundRobinRule
常用的负载均衡规则(IRule)有:
负载均衡策略 | 子类型 | 负载均衡名称 |
---|---|---|
RoundRobinRule | 轮询调度(默认的) | |
WeightedResponseTimeRule | 权重(不推荐,过时了) | |
ResponseTimeWeightedRule | 权重 | |
RandomRule | 随机分配 | |
RetryRule | 重试机制 |
4.2 自定义负载均衡策略
1.添加配置类 自定义负载均衡策略 或者实现 IRule 接口
@Configuration
public class CostumRibbonConfig {
@Bean
public IRule ribbonRule() {
// 自定义负载均衡的策略,此处采用的 随机策略
return new RandomRule();
}
}
2.启动类上添加 开启负载均衡配置
@SpringBootApplication
@EnableEurekaClient
// 开启ribbon负载均衡
// books-service 服务采用的是 CostumRibbonConfig 里面的负载均衡策略
@RibbonClient(name = "books-service", configuration = CostumRibbonConfig.class)
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}