Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。
feign底层是使用了ribbon作为负载均衡的客户端,而ribbon的负载均衡是依赖于eureka 获得各个服务的地址。
Feign的原理:
- 1.启动时,程序会进行包扫描,扫描所有包下所有@FeignClient注解的类,并将这些类注入到spring的IOC容器中。当定义的Feign中的接口被调用时,通过JDK的动态代理来生成RequestTemplate。
- 2.RequestTemplate中包含请求的所有信息,如请求参数,请求URL等。
- 3.RequestTemplate声场Request,然后将Request交给client处理,这个client默认是JDK的HTTPUrlConnection,也可以是OKhttp、Apache的HTTPClient等。
- 4.最后client封装成LoadBaLanceClient,结合ribbon负载均衡地发起调用。
执行流程:
1、由于我们在入口程序使用了@EnableFeignClients注解,Spring启动后会扫描标注了@FeignClient注解的接口,然后生成代理类。
2、我们在@FeignClient接口中指定了value,其实就是指定了在Eureka中的服务名称。
3、在FeignClient中的定义方法以及使用了SpringMVC的注解,Feign就会根据注解中的内容生成对应的URL,然后基于Ribbon的负载均衡去调用REST服务。