SpringCloud 之 Ribbon (三)
程序员文章站
2022-06-22 16:17:24
...
一、Ribbon 简介
Ribbon是Netflix发布的开源项目,主要提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon会基于某种规则(如简单轮询,随机连接,根据响应时间加权等)去连接这些机器。我们也可以使用Ribbon实现自定义的负载均衡算法。
二、Ribbon 原理
将Load Balancer逻辑集成到consumer,consumer从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择一个合适的服务器。
三、常见负载均衡策略
1.随机负载均衡 (Random)
随机选择状态为UP的Server
2.加权响应时间负载均衡 (WeightedResponseTime)
根据响应时间分配一个weight,响应的时间越长,weight越小,被选中的可能性越低。
四、集成Eureka使用
1.eureka-consumer项目中添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
2.获取RestTemplate方法上增加注解@LoadBalanced
@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
3.使用服务名称作为请求 URL
URL中的eureka-provider为eureka-provider项目中的应用名,多个provider的应用名要一致,ribbon会根据负载均衡策略去选择调用哪一台的服务。
Ribbon 默认使用负载均衡的策略是轮询,对服务进行调用。
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping("get/{id}")
public User get(@PathVariable("id") Integer id) throws Exception {
return restTemplate.getForObject("http://eureka-provider/provider/user/get/" + id, User.class);
}
}
4.其他负载均衡策略使用,比如创建个随机策略。
@Bean
public IRule randomRule() {
return new RandomRule();
}
五、注意事项
Eureka + Ribbon 集成后,使用服务名称作为请求 URL,服务名称中不要有下划线(_)。
eureka-provider不要写成eureka_provider
下一篇: ribbon源码分析