1.概述

在本教程中,我们将要描述春云开放式- 用于Spring Boot应用程序的声明性休息客户端。

假装通过可插入注释支持(包括Feign注释和JAX-RS注释),使编写web服务客户端变得更加容易。

同时,春云增加了支持Spring MVC注释并且使用相同的HttpMessageConverters在Spring Web中使用。

使用Feign的一个好处是,金宝搏官网188be我们不需要为调用服务编写任何代码,只需编写接口定义即可。

2.依赖关系

首先,我们将创建一个Spring Boot web项目并添加春天云 - 起动器 - 开放式依赖我们的依赖pom.xml文件:

<依赖项>  org.springframework.cloud   Spring-Cloud-Starter-OpenFeign  

此外,我们需要添加spring-cloud-dependencies:

 <依赖性> <依赖项>  org.springframework.cloud  春云依赖性  $ {spring-cloud.version}   POM  <范围>导入   

我们可以找到最新版本的春天云 - 起动器 - 开放式spring-cloud-dependencies在Maven中央。

3.装客户端

接下来,我们需要添加@EnableFeignClients到我们的主课程:

@SpringBootApplication @EnableFeignClients public class ExampleApplication {public static void main(String[] args) {SpringApplication.run(ExampleApplication.class, args);}}

有了这个注释,我们就可以对声明它们是虚客户机的接口启用组件扫描。

然后,我们声明一个假客户端使用@FeignClient注释:

@feignclient(value =“jplaceholder”,url =“https://jsonplaceholder.typicode.com/”)公用接口jsonplaceholderclient {@requestmapping(方法= requestmethod.get,value =“/ posts”)列表 getposts();@requestmapping(方法= requestmethod.get,value =“/ posts / {postId}”,post vercodid post =“application / json”)(@pathvariable(“postid”)long postid);}

在本例中,我们配置了一个客户机来读取JSONPlaceHolder api

价值参数通过了@FeignClient注释是一个强制性的,任意的客户名称,而在其中URL.参数,我们指定API基URL。

此外,由于此界面是一个假装客户端,我们可以使用Spring Web注释来声明我们要触及的API。

4.配置

现在,了解这一点非常重要每个假装客户端都由一组可自定义的组件组成。

属性为每个命名客户机按需创建一个新的默认设置FeignClientsConfiguration我们可以根据下一节中解释的课程。

上面的类包含这些bean:

  • 解码器 -ResponseEntityDecoder后,其Springdecoder,用于解码响应
  • 编码器,SpringEncoder,用于编码请求人员
  • 日志程序—Slf4jLogger是假人使用的默认记录器
  • 合同-SpringMvcContract,它提供注释处理
  • Feign-Builder -HystrixFeign。构建器用于构造组件
  • 客户端LoadBalancerFeignClient或默认虚假客户端

4.1。自定义bean配置

如果我们想定制一个或多个bean,我们可以用@ configuration班级,我们将添加到哪个FeignClient注释:

@FeignClient(value = "jplaceholder", url = "https://jsonplaceholder.typicode.com/", configuration = MyClientConfiguration.class)
@Configuration public class MyClientConfiguration {@Bean public OkHttpClient client(){返回新的OkHttpClient();}}

在这个例子中,我们告诉Feign使用Okhttpclient.而不是默认的支持HTTP/2。

Feign支持不同用例的多个客户机,包括apachehttpclient.,它会随请求发送更多头信息——例如,内容长度,有些服务器期望。

要使用这些客户端,不要忘记将所需的依赖性添加到我们的pom.xml例如,文件,例如:

<依赖> < groupId > io.github。openfeign feign-okhttp   io.github。openfeign < / groupId > < artifactId > feign-httpclient < / artifactId > < / >的依赖

我们可以找到最新版本的feign-okhttpfeign-httpclient在Maven中央。

4.2。配置使用属性

而不是使用@ configuration类,我们可以使用应用程序属性来配置假装客户端,如图所示application.yaml例子:

faign:client:config:default:connectTimeout:5000 ReadTimeout:5000 LoggerLevel:Basic

通过这个配置,我们将超时设置为5秒,记录器级别设置为基本的对于应用程序中声明的每个客户机。

最后,我们可以创建配置默认的作为客户端名配置所有@FeignClient对象,或者我们可以声明一个配置的虚假客户端名称:

客户端:config: jplaceholder:

如果我们有两者@ configurationbean和配置属性,配置属性将覆盖@ configuration值。

5.拦截器

添加拦截器是Feign提供的另一个有用功能。

拦截器可以针对每个HTTP请求/响应来执行从身份验证到记录的各种隐式任务。

在本节中,我们将实现我们自己的拦截器,并使用Spring Cloud OpenFeign开箱即用提供的拦截器。这两种模式将向每个请求添加一个基本身份验证头

5.1。实现RequestInterceptor.

所以,在下面的代码片段中,让我们实现我们的自定义请求拦截器:

@bean publicequeientinterceptor equestinterceptor(){return caperttemplate  - > {caperttemplate.header(“用户”,用户名);RequestTemplate.Header(“密码”,密码);RequestTemplate.Header(“Accept”,ContentType.Application_json.getmimetype());};}

此外,要将拦截器添加到请求链,我们只需要将此bean添加到@ configuration类,或者像我们前面看到的,在属性文件中声明它:

client: config: default: requestInterceptors: com.baeldun金宝搏188体育g.cloud.openfeign.JSONPlaceHolderInterceptor

5.2。使用BasicAuthRequestInterceptor

或者,我们可以使用BasicAuthRequestInterceptorSpring Cloud OpenFeign提供的课程:

@Bean Public BasicauthRequestInterceptor BasicAuthRequestInterceptor(){返回新的BasicAuthRequestInterceptor(“用户名”,“密码”);}

就这么简单!现在所有的请求都将包含基本的身份验证头。

6.Hystrix支持

假装支持Hystrix.,所以如果我们启用它,我们可以实现回退模式。

利用后退模式,当远程服务呼叫失败时,而不是生成例外时,服务消费者将执行替代代码路径以尝试通过另一种方式执行动作。

为了实现这个目标,我们需要启用Hystrix添加feign.hystrix.enabled = true在属性文件中。

这允许我们实现当服务失败时调用的回退方法:

@component公共类jsonplaceholderfallback实现jsonplaceholderclient {@override public list  getposts(){returnt collections.emptylist();@override公共帖子getPostById(Long Postid){返回null;}}

为让Feign知道已经提供了回退方法,我们还需要在@FeignClient注释:

@feignclient(value =“jplaceholder”,url =“https://jsonplaceholder.typicode.com/”,ourckback = jsonplaceholderfallback.class)公共接口jsonplaceholderclient {// apis}

7.伐木

对于每个假装客户端,默认情况下创建一个记录器。

要启用日志记录,应该在application.propertieS文件,使用客户端接口的包名:

logging.level.com.金宝搏188体育baeldung.cloud.openfeign.Client:调试

或者,如果我们想仅为包中的一个特定客户端启用日志记录,我们可以使用完整的类名:

logging.level.com.金宝搏188体育baeldung.cloud.openfeign.client.jsonPlaceHolderClient:调试

注意,伪日志只对调试等级。

logger.Level.Level.我们可以为每个客户端配置多少日志:

@configuration公共类客户端configuration {@bean logger.level feignloggerlevel(){return logger.level.basic;}}

有四个记录级别可供选择:

  • 没有任何- 没有日志记录,这是默认值
  • 基本- 仅记录请求方法,URL和响应状态
  • 标题-记录基本信息以及请求和响应头
  • 完整的-记录请求和响应的主体、头和元数据

8.错误处理

Feign的默认错误处理程序,errordecoder.default.,总是抛出一个FeignException

这种行为并不总是最有用的。所以,要自定义抛出的Exception,可以使用CustomErrorDecoder:

公共类CatcherRordecoder实现ErrorDecoder {@Override公共异常解码(String Methickey,响应响应){Switch(response.status()){case 400:returne newardrequestexception();案例404:返回新的NotFoundException();默认值:返回新的异常(“通用错误”);}}}

然后,正如我们之前所做的,我们必须替换默认值errordecoder.添加一个bean到@ configuration类:

@configuration公共类客户端configuration {@bean public errordecoder errordecoder(){return new customerrordecoder();}}

9.结论

在本文中,我们讨论了Spring云OpenFeign及其在简单示例应用程序中的实现。

此外,我们已经了解了如何配置客户端,如何将拦截器添加到我们的请求,以及如何处理错误Hystrix.ErrorDecoder。

像往常一样,可以使用本教程中显示的所有代码示例在GitHub。

通用底部

开始使用Spring 5和Spring Boot 2,通过学习春天课程:

>>查看课程
对这篇文章的评论关闭!