Ribbon和Feign负载均衡

SpringCloud实现负载均衡有两种方式:

  1. RestTemplate+Ribbon
  2. Feign

 

 

Ribbon是基于Netfiix Ribbon实现的一套客户端(Client)负载均衡的工具。

  ribbon的核心组件是IRule。

  自身携带7种算法:

  1.     RoundRobinRule  轮询规则   
  2.     RandomRule  随机原则   
  3.     AvailabilityFilteringRule  根据服务是否死掉或者服务处于高并发来分配权重
  4.     WeightedResponseTimeRule   根据响应时间分配权重
  5.     RetryRule  重试
  6.     BestAvailableRule  高可用
  7.     ZoneAvoidanceRule  避免无效服务

    

    

 

 

    1、controller层:使用RestTemplate

 1 @RestController
 2 public class DeptController_Consumer {
 3     private static final String REST_URL_PREFIX = "http://MICROSERVICECLOUD-DEPT";
 4 
 5     @Autowired
 6     private RestTemplate restTemplate;
 7 
 8     @RequestMapping(value = "/consumer/dept/add")
 9     public boolean add(Dept dept) {
10         return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept, Boolean.class);
11     }
12 }

    2、可自定义负载均衡算法,如下:

    2.1 赋予RestTemplate负载均衡的能力

@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced   //使用@LoadBalanced注解赋予RestTemplate负载均衡的能力
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

    2.2 可抽出一个MyRule类

@Configuration
public class MySelfRule {
    @Bean
    public IRule myRule(){
        return new RandomRule();
    }
}

    2.3 自定义负载均衡算法,继承AbstractLoadBalancerRule

private int total = 0;          // 总共被调用的次数,目前要求每台被调用5次
private int currentIndex = 0;   // 当前提供服务的机器号
//要求:轮询每台服务器,每台服务器调用5次
if(total < 5)
{
    server = upList.get(currentIndex);
    total++;
}else {
    total = 0;
    currentIndex++;
    if(currentIndex >= upList.size())
    {
        currentIndex = 0;
    }
}

 

Feign是声明式的web服务客户端,是编写web服务客户端变得更容易。

  使用方式:声明式的接口+注解

  

@FeignClient(value = "MICROSERVICECLOUD-DEPT")
public interface DeptClientService {
    @RequestMapping(value = "/dept/add", method = RequestMethod.POST)
    public boolean add(Dept dept);
}

  ###针对于consumer主启动类加上@EnableFeignClient注解即可。

posted @ 2020-05-10 22:06  潘小伟  阅读(551)  评论(0编辑  收藏  举报