这都是Ribbon的负载均衡做到的 针对问题一,通过跟断点得知,Ribbon是通过几种不同的负载均衡算法实现的这一个机制(比如轮询算法) 针对问题二,Ribbon会根据服务名称去Eureka注册中心拉取服务,如下两个图所示:
RoundRobin —— 意为轮询,操作系统也有类似的概念(CPU时间片轮转)
可以使用如下代码配置对某个服务的负载均衡策略(在 application.yml里配置)
比如OrderSerive调用userservice采用随机规则,就需要在OrderSerive的yml的配置文件中配置
# 给某个微服务配置负载均衡规则,这里是userservice服务为例
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则
OrderSerive启动类时注入一个规则,访问其他所有Service都是这个规则
@Bean
public IRule randomRule() {
return new RandomRule();
}
Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。