Ribbon和Feign负载均衡
SpringCloud实现负载均衡有两种方式:
- RestTemplate+Ribbon
- Feign
Ribbon是基于Netfiix Ribbon实现的一套客户端(Client)负载均衡的工具。
ribbon的核心组件是IRule。
自身携带7种算法:
- RoundRobinRule 轮询规则
- RandomRule 随机原则
- AvailabilityFilteringRule 根据服务是否死掉或者服务处于高并发来分配权重
- WeightedResponseTimeRule 根据响应时间分配权重
- RetryRule 重试
- BestAvailableRule 高可用
- 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注解即可。