知乎专栏 |
@Configuration public class RibbonConfigure { @LoadBalanced @Bean public RestTemplate restTemplate(){ return new RestTemplate(); } //指定Ribbon使用随机策略 @Bean public IRule loadBalanceRule(){ //return new RandomRule(); List<Integer> ports = new ArrayList<>(); ports.add(8081); return new CustomRule(ports); } }
package cn.netkiller.openfeign.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @Autowired private LoadBalancerClient loadBalancerClient; @GetMapping("/lb") public String LoadBalancer() { ServiceInstance serviceInstance = this.loadBalancerClient.choose("web"); System.out.println("Server: " + serviceInstance.getServiceId() + ":" + serviceInstance.getHost() + ":" + serviceInstance.getPort()); return serviceInstance.toString(); } }
spring.cloud.loadbalancer.ribbon.enabled=false
provider.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
RoundRobinRule 轮询策略。Ribbon 默认采用的策略。若经过一轮轮询没有找到可用的 provider,其最多 轮询 10 轮。若最终还没有找到,则返回 null。 RandomRule 随机策略,从所有可用的 provider 中随机选择一个。 RetryRule 重试策略。先按照 RoundRobinRule 策略获取 provider,若获取失败,则在指定的时限内重试。默认的时限为 500 毫秒。 BestAvailableRule 最可用策略。选择并发量最小的 provider,即连接的消费者数量最少的 provider。 AvailabilityFilteringRule 可用过滤算法。该算法规则是:过滤掉处于熔断状态的 provider 与已经超过连接极限的 provider,对剩余 provider 采用轮询策略。 ZoneAvoidanceRule zone 回避策略。根据 provider 所在 zone 及 provider 的可用性,对 provider 进行选择。 WeightedResponseTimeRule “权重响应时间”策略。根据每个 provider 的平均响应时间计算其权重,响应时间越快权重越大,被选中的机率就越高。在刚启动时采用轮询策略。后面就会根据权重进行选择了。