SpringCloud+eureka负载均衡
SpringCloud 搭建 eureka集群后,实现负载均衡
在RestTemplate的配置方法上添加@LoadBalanced
注解:
修改调用方式,不再手动获取ip和端口,而是直接通过服务名称调用:
代码:
public User queryUserByIds(Long id){
//直接通过服务名称找对应ip ,user-service是服务的名称
String url = "http://user-service/user/"+ id;
// 使用restTemplate发起请求
ResponseEntity<User> entity = restTemplate.getForEntity(url, User.class);
// 获取返回对象
User user = entity.getBody();
return user;
}
在客户端的yml文件中配置,默认是简单轮循
下面是配置随机负载
SpringBoot提供了修改负载均衡规则的配置入口:
user-service:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
格式是:{服务名称}.ribbon.NFLoadBalancerRuleClassName
,值就是IRule的实现类。
测试:
@Autowired
RibbonLoadBalancerClient client;
@Test
public void loadTest(){
for( int i = 0 ; i <100 ;i++){
ServiceInstance instance = client.choose("user-service");
System.out.println(instance.getHost()+":"+ instance.getPort());
}
}
从集群中随机获取ip和端口