Spring Cloud(三):Web服务客户端之Feign

前文介绍了实现客户端负载均衡的Ribbon,但直接使用Ribbon的API来实现服务间的调用相对较为繁琐,服务间的调用能否像本地接口调用一样便捷、透明,更符合编程习惯呢?Feign就是用来干这事的。

Feign

Feign是一个声明式的Web服务客户端,让服务之间的调用变得非常简单——定义带@FeignClient注解的接口,本地直接@Autowired 接口,通过调用接口的方法来实现远程服务的调用。

 支持的注解包括Feign注解与JAX-RS(Java API for RESTful Web Services)注解。

 每一个Feign的客户端都包含一系列对应的组件,Spring Cloud通过FeignClientsConfiguration 为每一个命名的Feign客户端创建一个组件集合,包括feign.Decoder,feign.Encoder,feign.Contract等。

 

Feign提供的默认bean实现及说明

Bean类型 默认实现类 说明
Decoder   ResponseEntityDecoder   ResponseEntityDecoder封装了SpringDecoder,解码器,将服务的响应消息进行解码  
Encoder   SpringEncoder   编码器  
Logger   Slf4jLogger   日志框架  
Contract   SpringMvcContract   支持注解契约,使用SpringMvcContract可以对Spring MVC注解提供支持  
Feign.Builder   HystrixFeign.Builder   使用断路器来装饰Feign接口  
Client   LoadBalancerFeignClient   如果是ribbon则 LoadBalancerFeignClient, 如果是spring cloud LoadBalancer 则 FeignBlockingLoadBalancerClient,默认ribbon  

 

跟Ribbon类似,可以通过配置类来自定义Feign客户端,如

@FeignClient(name = "hello-service", configuration = CustomConfiguration.class) public interface StoreClient { //.. } public class CustomConfiguration { @Bean public Contract feignContract() { return new feign.Contract.Default(); } @Bean public BasicAuthRequestInterceptor basicAuthRequestInterceptor() { return new BasicAuthRequestInterceptor("user", "password"); } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyxjpy.html