Home | 简体中文 | 繁体中文 | 杂文 | Github | 知乎专栏 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏

63.6. ribbon

63.6.1. 

			
@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);
    }
}
			
			

63.6.2. LoadBalancerClient 实例

application.properties
				
web.ribbon.listOfServers=localhost:7900,localhost:7901,localhost:7902				
				
				
LoadBalancerClient 获取服务器列表
				
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();
	}

}
				
				
				

63.6.3. Ribbon 相关配置

			
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 的平均响应时间计算其权重,响应时间越快权重越大,被选中的机率就越高。在刚启动时采用轮询策略。后面就会根据权重进行选择了。