Ribbon
是一个客户端负载均衡工具,主要功能是将面向服务的Rest模板(RestTemplate)请求转换成客户端负载均衡的服务调用。通过Ribbon,开发人员可以在客户端实现请求的负载均衡,而无需单独部署负载均衡器。Ribbon支持多种负载均衡算法,如轮询、随机
、加权等,只需要在配置文件类中添加@LoadBalanced
。
Ribbon配置在消费者模块中
之前写过消费者的模块 =>SpringCloud之消费者
本文章的目的是:利用Ribbon实现负载均衡
1、导入依赖
<!-- ribbon & eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
2、创建配置文件类
只需要在RestTemplate上添加
@LoadBalanced
注解
@Configuration
public class ConfigBean {
/**
* http请求
* @return
*/
@Bean
@LoadBalanced // 使用Ribbon
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
@Bean
public IRule getRule(){
return new RandomRule(); // 随机
// return new MyRule(); 自定义
}
}
3、定义负载均衡的规则
实现了IRule的实现类如下:
具体实现类作用如下:
RandomRule:随机规则。使用Random对象从服务列表中随机选择一个服务实例。这种规则在每次请求时都会随机选择一个服务实例,有助于实现请求的均匀分布。
RoundRobinRule:轮询规则。这是Ribbon的默认规则,也是更高级规则的回退策略。它按照顺序依次选择服务实例进行调用,实现了一种简单的负载均衡。
RetryRule:重试规则。这种规则首先使用RoundRobinRule进行服务实例选择,如果选择服务实例失败或在指定时间内没有响应,则会在一定时间内不断进行重试,直到找到可用的服务实例或超时。
WeightedResponseTimeRule:加权响应时间规则。这种规则会根据每个服务实例的平均响应时间计算权重,响应时间越快的服务实例权重越高,被选中的概率也越高。这种规则能够优先将请求分发给性能更好的服务实例。
BestAvailableRule:最佳可用规则。它会选择并发量最小的服务实例进行调用,有助于平衡各个服务实例的负载。
ZoneAvoidanceRule:区域感知规则。在非AWS环境下,可以将其理解为根据机房或Eureka集群来选择服务实例。它会优先选择