【手把手】教你玩转SpringCloud Alibaba之OpenFeign

导读:本篇文章讲解 【手把手】教你玩转SpringCloud Alibaba之OpenFeign,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1、什么是OpenFeign

OpenFeign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用OpenFeign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问HTTP请求,用法其实就是编写一个接口,在接口上添加注解即可。可以简单理解它是借鉴Ribbon的基础之上,封装的一套服务接口+注解的方式的远程调用器。它的宗旨是在编写Java Http客户端接口的时候变得更加容易,其底层整合了Ribbon,所以也支持负载均衡。

之前我们使用Ribbon的时候,利用RestTemplate对Http请求进行封装处理,但是在实际开发中,由于对服务依赖的调用不可能就一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以OpenFeign在此基础之上做了进一步的封装,由它来帮助我们定义和实现依赖服务接口的定义,我们只需创建一个接口并使用注解的方式来配置它,即可完成对微服务提供方的接口绑定,简化Ribbon的操作。

2、初试OpenFeign

首先要明确:使用OpenFeign是使用在消费者端去远程调用,就必须要是用FeignClient注解,来标注要调用的服务提供者名称,然后在通过一个接口来定义要调用的方法,所以我们首先新建一个module:cloudalibaba-openfeign-consumer-8888,在父工程中引入相关依赖:

【手把手】教你玩转SpringCloud Alibaba之OpenFeign

在openfeign module中也引入相关依赖:

【手把手】教你玩转SpringCloud Alibaba之OpenFeign

编写yml配置文件

【手把手】教你玩转SpringCloud Alibaba之OpenFeign

主启动类中加入相关注解:

【手把手】教你玩转SpringCloud Alibaba之OpenFeign

在上一篇介绍sentinel的文章中(没有看过的小伙伴可以点击https://blog.csdn.net/FeenixOne/article/details/127658812),有创建9003和9004两个module,使用的ribbon进行跨服务请求,这里使用openfeign进行跨服务请求。

创建调用远程服务的接口,此接口就是配合使用OpenFeign的接口,在此接口中添加@FeignClient接口同时标注,要调用的服务端名称,同时使用与服务提供者,方法签名一致的抽象方法来表示远程调用的具体内容:

【手把手】教你玩转SpringCloud Alibaba之OpenFeign

新建Controller控制器调用Service中的方法:

【手把手】教你玩转SpringCloud Alibaba之OpenFeign

启动8888,对Controller中的方法进行访问:

【手把手】教你玩转SpringCloud Alibaba之OpenFeign【手把手】教你玩转SpringCloud Alibaba之OpenFeign

OpenFeign这玩意儿比Ribbon更晚诞生,肯定是比Ribbon更好用更方便,Ribbon既然支持负载均衡,那么OpenFeign肯定也支持,OpenFeign可以理解成基于Ribbon的再封装升级版。

3、OpenFeign超时控制

OpenFeign 客户端默认等待1秒钟,但是如果服务端业务超过1秒,则会报错。为了避免这样的情况,需要设置feign客户端的超时控制。由于OpenFeign 底层还是Ribbon,所以超时控制由Ribbon来控制,可在yml文件中配置。

在9003/9004的方法中延迟几秒钟,模拟长业务调用:

【手把手】教你玩转SpringCloud Alibaba之OpenFeign

在8888中添加远程调用:

【手把手】教你玩转SpringCloud Alibaba之OpenFeign

重启9003/9004/8888三个服务,通过OpenFeign进行远程调用:

【手把手】教你玩转SpringCloud Alibaba之OpenFeign【手把手】教你玩转SpringCloud Alibaba之OpenFeign

设置OpenFeign的长调用时间:需要在8888消费者端的yml文件中配置超时时间.因为OpenFeign本身整合了Ribbon,所以老版用的是Ribbon来配置。但是新版中已经彻底舍弃掉Ribbon的配置,纯粹使用feign自身的配置:

【手把手】教你玩转SpringCloud Alibaba之OpenFeign

访问8888模拟长业务的接口:

【手把手】教你玩转SpringCloud Alibaba之OpenFeign

 此时可以看到不会立马报错,在允许的时间内还是会正常等待。

4、OpenFeign日志打印

Feign 提供了日志打印功能,可以通过配置来调整日志级别,从而了解 Feign 中 Http 请求的细节。 简单理解,就是对Feign接口的调用情况进行监控和输出。

日志级别:
– NONE:默认的,不显示任何日志;
– BASIC:仅记录请求方法、URL、响应状态码及执行时间;
– HEADERS:除了 BASIC 中定义的信息之外,还有请求和响应的头信息;
– FULL:除了 HEADERS 中定义的信息之外,还有请求和响应的正文及元数据;

在启动类中通过@Bean注解注入OpenFeign的日志功能:

【手把手】教你玩转SpringCloud Alibaba之OpenFeign

配置yml配置文件

【手把手】教你玩转SpringCloud Alibaba之OpenFeign

启动8888,访问几次远程调用的接口,可以在控制台看到详细的日志输出:

【手把手】教你玩转SpringCloud Alibaba之OpenFeign

5、Sentinel整合OpenFeign

 在上一篇介绍sentinel的文章中(没有看过的小伙伴可以点击https://blog.csdn.net/FeenixOne/article/details/127658812),已经对Sentinel的基础使用进行了较为全面的讲解,结合本篇文章,来对Sentinel和OpenFeing进行整合。

老规矩,第一步还是要在8084项目中引入对应的依赖:

【手把手】教你玩转SpringCloud Alibaba之OpenFeign

修改8084项目中的yml文件,激活Sentinel对OpenFeign的支持:

【手把手】教你玩转SpringCloud Alibaba之OpenFeign

在8084项目的主启动类要添加@EnableFeignClients注解:

【手把手】教你玩转SpringCloud Alibaba之OpenFeign

编写OpenFeign接口,调用远程服务。接口写法和之前保持一致,但是要注意,这里要多增加一个FeignClient的属性。

【手把手】教你玩转SpringCloud Alibaba之OpenFeign

fallback:定义容错的处理类。当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口。

在Controller中加入调用Service方法:

【手把手】教你玩转SpringCloud Alibaba之OpenFeign

此时访问http://localhost:8084/getInfo/1的地址,是没有问题的:

【手把手】教你玩转SpringCloud Alibaba之OpenFeign【手把手】教你玩转SpringCloud Alibaba之OpenFeign

但是如果结束9003/9004服务,这个时候就会触发fallback属性对应的处理类型,完成服务降级:

【手把手】教你玩转SpringCloud Alibaba之OpenFeign

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/111895.html

(0)
Java光头强的头像Java光头强

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!