一、Ribbon
1、Ribbon是什么?
2、 Ribbon能干什么?
3、Ribbon与Nginx的区别
- Nginx是服务器负载均衡,客户端所有请求都会交给Nginx,然后由Nginx实现转发请求。Nginx在服务的消费方和提供方之间使用独立的LB设施,由该设施负责把访问请求通过某种策略转发值服务的提供方。
- Ribbon是客户端负载均衡,Ribbon将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务。
4、自定义Ribbon
IRule的实现类如下(默认是轮询):
二、Feign
1、Feign是什么?
2、 Feign能干什么?
3、Feign和OpenFeign的区别
4、OpenFeign与Ribbon在服务调用时的区别
Ribbon通过在消费者模块(springcloud-consumer-dept-80)中注入的restTemplete去远程访问服务提供者(springcloud-provider-dept-8001)的方法(通过服务名来访问)
OpenFeign通过springcloud-api模块下自定义接口DeptClientService,让所有消费模块可用。该接口中的方法与服务提供者(springcloud-provider-dept-8001)的controller接口方法是一样的。
在OpenFeign的消费模块中,只需要注入DeptClientService接口对象,即可调用该接口中的方法,然后该方法会根据@FeignClient(value = "service-provider-dept")注解找到注册中心的服务,然后进一步调用服务提供模块中的方法。
5、OpenFeign中的两个重要注解@FeignClient和@EnableFeignClients的作用
@FeignClient作用于Service接口上,如果服务提供方已经注册到注册中心了,那么name或者value的值为服务提供方的服务名称
@EnableFeignClients有三个作用:
- 引入了FeignClientsRegistrar;
- 指定扫描了FeignClient的包信息,就是指定了FeignClient接口类所在的包名;
- 指定了FeignClient接口类的自定义配置类。
FeignClientsRegistrar 用来处理 @FeignClient 注解修饰的 FeignClient 接口类,将这些接口类的 BeanDefinition 注册到 Spring 容器中,这样就可以使用 @Autowired 等方式来自动装载这些 FeignClient 接口类的 Bean 实例。