首先你看这一章的时候需要已经阅读了第一章,否则有点接不上哟
(一)SpringCloud之服务发现——Netflix Eureka_馒头花卷儿的博客-CSDN博客SpringCloud之服务发现——Netflix Eurekahttps://blog.csdn.net/suxiexingchen/article/details/125153278其实上一张最后使用的就是Ribbon
这里呢我们将延续前一章讲的,继续讲Rbiion回顾一下,使用Ribbon的关键一步就是在启动类的创建RestTemplate上添加了一个@LoadBalanced注解
这个注解简单来说:
- @LoadBalanced注解是来自cloud包下的一个注解
- 这个注解就是让某一个东西拥有负载均衡的能力
- 负载均衡的机制是轮询就是一个服务一次轮着来(但是第一次启动不分先后,随机哪个是哪个然后开始轮询,能明白吗?就是例如A,B,C并不一定从A开始ABC也有可能从C开始CAB)
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableEurekaClient
public class EurekaClientProducerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientProducerApplication.class, args);
}
@LoadBalanced//支持负载均衡
@Bean
public RestTemplate rest() {
return new RestTemplate();
}
}
负载均衡策略,常见的有:
| 策略类 | 命名 | 描述 |
| RandomRule | 随机策略 | 随机选择server |
| RoundRobinRule | 轮询策略 | 按照顺序选择server(ribbon默认策略) |
| RetryRule | 重试策略 | 在一个配置时间段内,当选择server不成功,则一直尝试选择一个可用的server |
| BestAvailableRule | 最低并发策略 | 逐个考察server,如果server断路器打开,则忽略,再选择其中并发链接最低的server |
| AvailabilityFilteringRule | 可用过滤策略 | 过滤掉一直失败并被标记为circuit tripped的server,过滤掉那些高并发链接的server(active connections超过配置的阈值) |
| ResponseTimeWeightedRule | 响应时间加权重策略 | 根据server的响应时间分配权重,响应时间越长,权重越低,被选择到的概率也就越低。响应时间越短,权重越高,被选中的概率越高,这个策略很贴切,综合了各种因素,比如:网络,磁盘,io等,都直接影响响应时间 |
| ZoneAvoidanceRule | 区域权重策略 | 综合判断server所在区域的性能,和server的可用性,轮询选择server并且判断一个AWS Zone的运行性能是否可用,剔除不可用的Zone中的所有server |
这里啊其实你是不是有个疑问,就是我没有引入Ribbon的包啊怎么就可以使用呢?
其实是因为Eurake以来了Ribbon来开一下依赖图
这里提示一下
- ribbon从2019年5月份后就不维护了,后期loadbalancer会成为主流。
- 目前还是ribbon用的多。
- Loadbalancer支持ribbon。
- ribbon和loadbalancer都是springcloud的负载均衡组件
- ribbon是Netflix开源的基于HTTP和TCP等协议负载均衡组件,loadBalancer是SpringCloud出的,根据服务id获取负载均衡器rpc地址。
- Ribbon的使用需要代码里手动调用目标服务,loadBalancer底层原理是默认调用ribbon的实现客户端负载均衡
这篇,没有写什么代码实现,上一章已经有了代码实现,这里主要解决一下上一章的一些疑问。



