Feign是一个声明式WebService客户端。使用Feign能让编写WebService客户端更加加单,它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。Feign也支持可插拔式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了SpringMVC白哦准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。
只需要创建一个接口,然后在上面添加注解即可。
github官网:https://github.com/OpenFeign/feign
在前面客户端是使用Ribbon+RestTemplate访问服务端,利用RestTemplate对http请求的封装处理,形成了一套模板化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多出调用,所以通常会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以,Feign再次基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。在Feign的实现下,我们只需要创建一个接口并使用注解的方式来配置它(以前是Dao接口上标注Mapper注解,现在是一个微服务接口上面住一个Feign注解即可),即可完成对服务提供方的接口绑定,简化了使用Spring Cloud Ribbon时,自动封装服务调用客户端的开发量。
Feign集成了Ribbon,利用Ribbon维护了微服务的服务列表信息,并通过轮询实现类客户端的负载均衡,而与Ribbon不同的是,通过Feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现类服务调用。如果需要更改负载策略,同Rest调用的修改方式一样,只需要在容器中注入IRule的实现类即可。
@Configuration
public class ConfigBean {
@Bean
public IRule getRule() {
return new RandomRule();
}
}
简单使用:
1、创建通过Feign调用的消费者工程,引入Feign依赖,其他的依赖跟普通的Rest调用相同
<dependency>
<groupId>org.springframework.cloud</groupId>