概念
Feigh是一个声明式web服务客户端。它能让开发web服务变得容易。使用Feign需要创建一个接口并注解它。它拥有包括Feign注解和JAX-RS注解的可插拔支持。它还支持可插拔的编码器和解码器。Spring Cloud拥有Spring MVC支持,并使用Spring Web中默认同样的HttpMessageConverters。在使用Feign时,Spring Cloud集成了Ribbon和Eureka来提供负载均衡的HTTP客户端。
Feign的在使用中需要注意的地方
不能直接支持接收对象参数,只能一个一个属性接收。如果必须要接收对象参数,可以变相通过@RequestBody,通过json的表单提交来实现。
对于日期类型支持和json转换间冲突多,还滞后8小时。转为字符串类型,在提供者时,再强制转换为日期,更加方便些。
@PathVariable(“name”) String name 必须写名称“name”,springmvc可以不写。
启动超过1s会报超时,再刷新就可以正常访问,原因在于hystrix断路器的影响,稍差的机器可能会发生这个问题。
调用过程
首先,提供者provider-user和消费者custorm-feign都注册到Eureka中。用户请求feign中的controller,feign中的controller调用feign定义的接口方法。接口的方法根据注解去找到eureka注册中心中的provider-user地址,然后请求远程provider-user所在服务器的地址,然后调用远程的provider-user提供者的具体服务。提供者响应返回json,json被feign封装传输给“接口”的返回值,“接口”在返回给feign的controller,最终响应给用户。
总结
Feign简化HttpClient开发,封装了JAX-RS和springmvc的注解,学习成本低。Feign是典型的基于接口,基于动态代理技术自动生成代理对象。
代码demo可参考git:https://github.com/a870368162/springcloud-demo