Spring Cloud Feign
Feign是一个声明式的Web Service客户端,它的目的就是让WebService调用更加简单。
特性
- 可插拔的注解支持,包括Feign注解和JAX-RS注解
- 支持可插拔的HTTP编码器和解码器
- 整合了ribbon,具有负载均衡的能力
- 整合了Hystrix,具有熔断的能力
- 支持HTTP请求和响应的压缩
工作原理
- 在开发微服务应用时,我们会在主程序入口添加@EnableFeignClients注解开启对Feign Client扫描加载处理。
- 当程序启动时,会进行包扫描,扫描所有@FeignClients的注解的类,并将这些信息注入 Spring IOC容器中。当定义的 Feign接口中的方法被调用时,通过JDK的代理的方式,来生成具体的 RequestTemplate,此时Feign会为每个接口方法创建一个RequetTemplate对象,该对象封装了HTTP请求需要的全部信息,如请求参数名、请求方法等都是在这个过程中确定的。
- 然后由RequestTemplate生成Request,并把Request交给Client去处理,这里指的Client可以是JDK原生的URLConnection、Apache的HttpClient、也可以是OkHttp。最后 Client被封装到LoadBalanceclient类,这个类结合Ribbon负载均衡发起服务之间的调用。
些许认识
- 事实上我们仅需要对消费者的Service层启用@FeignClient注解,无须实现,即可通过注解像使用其他Service那样使用他,虽然这个Service的实现过程并不在本地,这种设计方式即是WebService。