GitHub:https://github.com/spring-cloud/spring-cloud-openfeign
Feign是一个声明式的Web服务客户端,让编写Web服务客户端变得非常容易,只需创建一个接口并在接口上添加注解即可。
接口+注解 -> 微服务调用接口+@FeignClient
Feign在消费端使用
构建 Feign 工程
-> pom 中引入依赖
-> yml 中添加配置
server:
port: 80
eureka:
client:
#表示是否将自己注册进EurekaServer 默认为 true
register-with-eureka: false
#是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
fetchRegistry: true
service-url:
#defaultZone: http://localhost:7001/eureka
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #eureka集群,服务分部注册进集群
-> 启动类
-> Service 接口
-> Controller
-> 测试
注意:
正确的应该是 -> 消费者服务接口 声明的方法应与提供者暴露的方法保持一致。否则会找不到方法 404
错误如下:
、
OpenFeign 超时控制
- 默认等待1秒钟,超过后报错
在某些情况下,服务端接口返回的时间超过1秒钟,默认Feign客户端只等待1秒钟,导致Feign客户端不想等待了,直接返回报错。为了避免这样的情况,有时候我们需要设置Feign客户端的超时控制。
OpenFeign 中天生带着 Ribbon -> 自己支持负载均衡
-> yml 文件中开启配置
server:
port: 80
eureka:
client:
#表示是否将自己注册进EurekaServer 默认为 true
register-with-eureka: false
#是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
fetchRegistry: true
service-url:
#defaultZone: http://localhost:7001/eureka
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #eureka集群,服务分部注册进集群
#设置feing客户端超时时间(OpenFeing默认支持ribbon)
ribbon:
#指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间(5000=5秒)
ReadTimeout: 5000
#指的是建立连接后从服务器读取到可用资源所用的时间
ConnectTimeout: 5000
OpenFeing 日志打印功能
- Feing提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解Feing中Http请求细节。
对Feing接口的调用情况进行监控和输出
日志级别
- NONE:默认的,不显示任何日志
- BASIC:仅记录请求方法、URL、响应状态码及执行时间;
- HEADERS:除了BASIC中定义的信息外,还有请求和响应的头信息;
- FULL:除了HEADERS中定义的信息外,还有请求和响应的正文及元数据。
-> 配置日志Bean
-> yml 文件开启日志
server:
port: 80
eureka:
client:
#表示是否将自己注册进EurekaServer 默认为 true
register-with-eureka: false
#是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
fetchRegistry: true
service-url:
#defaultZone: http://localhost:7001/eureka
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #eureka集群,服务分部注册进集群
#设置feing客户端超时时间(OpenFeing默认支持ribbon)
ribbon:
#指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间(5000=5秒)
ReadTimeout: 5000
#指的是建立连接后从服务器读取到可用资源所用的时间
ConnectTimeout: 5000
logging:
level:
# feign 日志以什么级别监控那个接口
com.atguigu.springcloud.service.PaymentFeignService: debug
-> 测试: