原理
- Ribbon是一个Http和Tcp的客户端负载均衡工具,它可以在客户端配置服务端列表,,它使用RestTemplate模拟客户端请求,过程相对繁琐。
- Feign继承了Ribbon,使用接口的方式进行服务调用。
面试题:
1.负载均衡算法有哪些?
随机、轮询、响应时间权重、重试等,还可以实现IRule接口,自定义负载均衡算法。
2.Ribbon和Feign的区别?
启动类上加的注解不同,Ribbon用的是@RibbonClients;Feign用的是@EnableFeignClients
服务的指定位置不同,Ribbon是在@RibbonClient上指定服务名称;Feign是在接上的@FeignClient上指定。
调用方式不同,Ribbon需要自己构建http请求,模拟http请求,然后使用RestTempate进行调用;Feign采用接口的方式调用。
3.Ribbon原理
先去本地获取从Eureka缓存下来的服务列表,然后使用负载均衡算法选取一个服务,使用HttpClient进行调用。
4.Feign的原理
在配置类上,加上@EnableFeginClients,那么该注解是基于@Import注解,注册有关Fegin的解析注册类,这个类是实现 ImportBeanDefinitionRegistrar 这个接口,重写registryBeanDefinition 方法。他会扫描所有加了@FeginClient 的接口,然后针对这个注解的接口生成动态代理,然后你针对fegin的动态代理去调用他方法的时候,此时会在底层生成http协议格式的请求,使用HttpURLConnection进行调用。
5.Feign和OpenFeign的区别?
OpenFeign在feign的基础上支持了SpringMVC的注解,如@RequestMapping等等,OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。