目前主流的负载均衡方案分为以下两种:
SpringCloud Ribbon 是基于Netffix Ribbon
是实现的一套客户端负载均衡工具
,Ribbon客户端提供了一系列的完善的配置,如超时,重试等等,通过LoadBalance
获取到服务提供的所有机器的实例。Ribbon会自动地基于某种规则(轮询,随机)
去调用这些服务,Ribbon也可以自己实现自己的负载均衡算法。
例如SpringCloud 中的Ribbon 客户端会有一些服务地址列表,再发送请求前通过负载均衡算法到另一个服务器,然后进行访问,这是客户端的负载均衡,
即在客户端就进行了负载均衡算法的分配
nacos-discovery依赖了ribbon,可以不再引入ribbon的依赖
@LoadBalanced
实现负载均衡@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder builder){
// 剋以进行连接超时的设置
builder.setConnectTimeout(3000);
RestTemplate restTemplate = builder.build();
return restTemplate();
}
@AutoWired
private RestTemplate restTemplate;
@RequestMapping("/findOrderByUserId/{id}")
public R findOrderById(@PathVariable("id") Integer id){
String url = "http://mall-order/order/findOrderById/"+id;
R result = restTemplate.getForObject(url,R.class);
return result;
}
可以写在配置类中,也可以直接写在启动类上。
全局配置: 调用其他服务,一律使用指定的负载均衡策略
@Configuration
public class RibbonConfig(){
/**
* 全局配置
*指定负载均衡策略
*@return
*/
@Bean
public IRule iRule(){
// 指定使用nacos的提供负载均衡策略(优先调用统一集群上的实例,基于随机权重)
return new NacosRule();
}
}
这里返回IRule的类,原因是所有的负载均衡策略都有一个公共的父接口就是IRule,所以返回后,可以使用任何一种负载均衡策略。
局部配置:调用指定的微服务的服务提供者提供的服务,使用对应的负载均衡算法
修改application.yml
# 被调用的微服务名称
mall-servicce:
ribbon:
# 只当使用Nacos的负载均衡策略,
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
最后还要再启动类上加上ribbonClients的注解
注意
:此操作实在服务的消费端实现