此文章主要讲解 springcloud 中 OpenFeign 服务接口调用相关知识。
Feign 简介
Feign 是 Netflix 公司开发的声明式、模板化的 HTTP 客户端,其灵感来自 Retrofit、JAXRS-2.0 以及 WebSocket。
Feign 可以帮助我们更加便捷、优雅的调用 HTTP 的 API。
在 SpringCloud 中,使用 Feign 非常简单–创建一个接口,并在接口上添加一些注解,代码就完成了。
Feign 支持多种注解,例如 Feign 自带的注解或者 JAX-RS 注解等。
SpringCloud 对 Feign 进行了增强,使得 Feign 支持了 SpringMVC 注解,并整合了 Ribbon 和 Eureka,从而让 Feign 的使用更加简单。
概述
Feign 和 OpenFeign 的区别
Feign 和 Ribbon 的联系
Ribbon 是一个基于 HTTP 和 TCP 客户端的负载均衡工具。它可以在客户端配置 RibbonServerList(服务端列表),使用 HttpClient 或者 RestTemplate 模拟 HTTP 请求,步骤相当繁琐。
Feign 是在 Ribbon 的基础上进行了一次改进,是一个使用起来更加方便的 HTTP 客户端。采用接口的方式,只需要创建一个接口,然后在上面添加注解,将需要调用的其他服务的方法定义成抽象方法即可,不需要自己构建 HTTP 请求。然后就像调用自身工程的方法调用个,而感觉不到调用远程方法,使得编写客户端变得非常容易。
Feign本身已经集成了Ribbon的依赖和自动配置
,因此我们不需要额外的引入依赖,也不需要再注册 RestTemplate 对象。我们可以通过ribbon.xx
来进行全局配置,或者通过服务名.ribbon.xx
来对指定的服务配置。
使用步骤
Feign 在消费端使用
新建模块
cloud-consumer-feign-order80
POM 文件
1 | <dependencies> |
可以看出,OpenFeign自带Ribbon
,具有负载均衡功能
YML 文件
1 | server: |
主启动类
1 |
|
业务类
新建 Service 接口
这个 service 还是 consumer 模块的接口,便于测试,和提供者没有任何关系,不需要包类名一致。它使用起来就相当于是普通的 service 。
1 |
|
新建 Controller
1 |
|
启动访问测试
- 先启动 2 个 eureka 集群 7001 和 7002
- 再启动 2 个提供者 8001 和 8002
- 启动 openfeign 的消费者 80
- 访问: http://localhost/consumer/feign/payment/1
访问成功,并且实现负载均衡
Feign 的配置
从 Spring Cloud Edeware 开始,Feign 支持使用属性自定义。对于一个指定名称的 Feign Client(例如该 Feign Client 的名称是 feignName),Feign 支持如下的配置项。
1 | # 配置Feign |
如果需要改变所有的 Feign Client,可使用默认的 feign 名称创建配置属性:
1 | feign: |
请求压缩
Spring Cloud Feign 支持对请求和响应进行 Gzip 压缩,以减少通信过程中的性能损耗。通过下面的参数可以开启请求和响应的压缩功能。
1 | # 配置Feign |
同时,我们也可以对请求的数据类型以及触发压缩大小的下限进行设置
1 | # 配置Feign |
超时控制
OpenFeign 默认等待一秒钟,超过后报错。
为了避免这样的情况,有时候我们需要设置 Feign 客户端的超时控制。
在 yml 配置文件中配置
1 | # 设置feign客户端超时时间(OpenFeign默认支持ribbon) |
日志打印功能
说白了就是对Feign接口的调用情况进行监控和输出
在开发或者运行阶段的时候往往希望看到 Feign 请求过程的日志记录,默认情况下 Feign 的日志是没有开启的。
如果想要属性配置方式来达到日志效果,只需要在 application.yml 中添加如下的内容即可:
1 | # 配置Feign |
logging.level.xxx: debug
:Feign 日志只会对日志级别的 debug 做出响应。feign.client.config.service-product.loggerLevel
:默认 Feign 的日志级别有四种。NONE
(性能最佳,适用于生产):不记录任何日志(默认值)。
BASIC
(适用于生产环境追踪问题):仅记录请求方法、URL、响应状态码以及执行时间。
HEADERS
:记录 BASIC 级别的基础上,记录请求和响应的 header。
FULL
(比较适用于开发和测试环境定位问题):记录请求和响应的 header、body 和元数据。
也可以使用配置 Bean 的方式开启所有的日志功能:
1 |
|
发布时间: 2021-01-17
最后更新: 2024-06-24
本文标题: SpringCloud Alibaba入门到精通(六)- OpenFeign服务接口调用
本文链接: https://blog-yilia.xiaojingge.com/posts/ac2efed4.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
