版权声明:转载 请注明 原始链接 https://blog.csdn.net/sswqzx/article/details/84780547
1、Robbin概述
Robbin是 Netflixfa 发布的一个负载均衡器、SpringCloud 中,Eureka一般配合Ribbon进行使用,Ribbon提供了客户端负载均衡的功能
负载均衡策略:
(1) 简单轮询负载均衡
(2) 加权响应时间负载均衡
(3) 区域感知轮询负载均衡
(4) 随机负载均衡
2、实例演示
首先我们启动三个user-service实例,一个8081,一个8082 、一个8083
以相同的方法创建二个user-service
创建好后:
Eureka监控面板:
开启负载均衡:
因为Eureka中已经集成了Ribbon,所以我们无需引入新的依赖。直接修改代码
在Customer-service的RestTemplate的配置方法上添加@LoadBalanced
注解:
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate(new OkHttp3ClientHttpRequestFactory());
}
修改调用方式,不再手动获取ip和端口,而是直接通过服务名称调用:
@Service
public class UserService {
@Autowired
private RestTemplate restTemplate;
@Autowired
private DiscoveryClient discoveryClient;
public List<User> queryUserByIds(List<Long> ids) {
List<User> users = new ArrayList<>();
// 地址直接写服务名称即可
//根据service名称,获取到了服务实例的ip和端口。它就是LoadBalancerInterceptor
String baseUrl = "http://user-service/user/";
ids.forEach(id -> {
// 我们测试多次查询,
users.add(this.restTemplate.getForObject(baseUrl + id, User.class));
// 每次间隔500毫秒
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
return users;
}
}
访问:
根据service名称,获取到了服务实例的ip和端口。LoadBalancerInterceptor处理映射service名和ip+端口号
使用 RibbonLoadBalanceClient来进行负载均衡(负载均衡算法处理)