Spring Cloud之Feign客户端
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud之Feign客户端相关的知识,希望对你有一定的参考价值。
Feign是一个声明式的Web服务客户端。这使得Web服务客户端的写入更加方便 要使用Feign创建一个界面并对其进行注释。它具有可插入注释支持,包括Feign注释和JAX-RS注释。Feign还支持可插拔编码器和解码器。Spring Cloud增加了对Spring MVC注释的支持,并使用Spring Web中默认使用的HttpMessageConverters
。Spring Cloud集成Ribbon和Eureka以在使用Feign时提供负载均衡的http客户端。
如何加入Feign
要在您的项目中包含Feign,请使用组org.springframework.cloud
和工件ID spring-cloud-starter-feign
的启动器。有关使用当前的Spring Cloud发布列表设置构建系统的详细信息,请参阅Spring Cloud项目页面。
示例spring boot应用
@Configuration @ComponentScan @EnableAutoConfiguration @EnableEurekaClient @EnableFeignClients public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
StoreClient.java
@FeignClient("stores") public interface StoreClient { @RequestMapping(method = RequestMethod.GET, value = "/stores") List<Store> getStores(); @RequestMapping(method = RequestMethod.POST, value = "/stores/{storeId}", consumes = "application/json") Store update(@PathVariable("storeId") Long storeId, Store store); }
在@FeignClient
注释中,String值(以上“存储”)是一个任意的客户端名称,用于创建Ribbon负载平衡器(有关Ribbon支持的详细信息,请参阅下文))。您还可以使用url
属性(绝对值或只是主机名)指定URL。应用程序上下文中的bean的名称是该接口的完全限定名称。要指定您自己的别名值,您可以使用@FeignClient
注释的qualifier
值。
Spring Cloud的Feign支持的中心概念是指定的客户端。每个假装客户端都是组合的组件的一部分,它们一起工作以根据需要联系远程服务器,并且该集合具有您将其作为应用程序开发人员使用@FeignClient
注释的名称。Spring Cloud根据需要,使用FeignClientsConfiguration
为每个已命名的客户端创建一个新的集合ApplicationContext
。这包含(除其他外)feign.Decoder
,feign.Encoder
和feign.Contract
。
Spring Cloud可以通过使用@FeignClient
声明额外的配置(FeignClientsConfiguration
)来完全控制假客户端。例:
@FeignClient(name = "stores", configuration = FooConfiguration.class) public interface StoreClient { //.. }
在这种情况下,客户端由FeignClientsConfiguration
中的组件与FooConfiguration
中的任何组件组成(后者将覆盖前者)。
name
和url
属性支持占位符。
@FeignClient(name = "${feign.name}", url = "${feign.url}") public interface StoreClient { //.. }
Spring Cloud Netflix默认为feign(BeanType
beanName:ClassName
)提供以下bean:
Decoder
feignDecoder:ResponseEntityDecoder
(其中包含SpringDecoder
)Encoder
feignEncoder:SpringEncoder
Logger
feignLogger:Slf4jLogger
Contract
feignContract:SpringMvcContract
Feign.Builder
feignBuilder:HystrixFeign.Builder
Client
feignClient:如果Ribbon启用,则为LoadBalancerFeignClient
,否则将使用默认的feign客户端。
可以通过将feign.okhttp.enabled
或feign.httpclient.enabled
设置为true
,并将它们放在类路径上来使用OkHttpClient和ApacheHttpClient feign客户端。
Spring Cloud Netflix 默认情况下不提供以下bean,但是仍然从应用程序上下文中查找这些类型的bean以创建假客户机:
Logger.Level
Retryer
ErrorDecoder
Request.Options
Collection<RequestInterceptor>
SetterFactory
创建一个类型的bean并将其放置在@FeignClient
配置(例如上面的FooConfiguration
)中)允许您覆盖所描述的每个bean。例:
@Configuration public class FooConfiguration { @Bean public Contract feignContract() { return new feign.Contract.Default(); } @Bean public BasicAuthRequestInterceptor basicAuthRequestInterceptor() { return new BasicAuthRequestInterceptor("user", "password"); } }
这将SpringMvcContract
替换为feign.Contract.Default
,并将RequestInterceptor
添加到RequestInterceptor
的集合中。
可以在@EnableFeignClients
属性defaultConfiguration
中以与上述相似的方式指定默认配置。不同之处在于,此配置将适用于所有假客户端。
以上是关于Spring Cloud之Feign客户端的主要内容,如果未能解决你的问题,请参考以下文章
spring cloud 之 Feign 使用HTTP请求远程服务
(22)java Spring Cloud+Spring boot+mybatis企业快速开发架构之SpringCloud-使用Feign调用服务接口