对于一个指定名称的 FeignClient(例如该 Feign Client 的名称为 feignName)。
feign:
client:
config:
feignName: ## 定义 Feginclient 的名称
connecttimeout: 5000 # 相当于Request.Options
readTimeout: 5000 # 相当于 Request.options
1oggerLevel: ful1 # 配置Feign的日志级别,相当于代码配置方式中的 Logger
errorDecoder: com.example.simpleErrorDecoder # Feign 的错误解码器,相当于代码配置方式中的 Errordecoder
retryer: com.example.simpleRetryer # 配置重试,相当于代码配置方式中的 Retryer
requestInterceptors: # 配置拦截器,相当于代码配置方式中的 RequestInterceptor
-com.example.FooRequestInterceptor
- com.example.BarRequestInterceptor
decode404: false
feignName : FeginClient 的名称。
connectTimeout : 建立链接的超时时长。
readTimeout : 读取超时时长。
loggerLevel : Fegin的日志级别。
errorDecoder : Feign的错误解码器。
retryer : 配置重试。
requestInterceptors : 添加请求拦截器。
decode404 : 配置熔断不处理404异常。
它可以在客户端配置 RibbonServerList (服务端列表),
使用 HttpClient 或 RestTemplate 模拟 http 请求,步骤相当繁琐。
feign 采用接口的方式,只需要创建一个接口,然后在上面添加注解即可,
将需要调用的其他服务的方法定义成抽象方法即可,不需要自己构建 http 请求。
然后就像是调用自身工程的方法调用,而感觉不到是调用远程方法,使得编写客户端变得非常容易。
Feign 中本身已经集成了 Ribbon 依赖和自动配置,
因此我们不需要额外引入依赖,也不需要再注册 RestTemplate对象。
另外,我们可以通过 ribbon.xx 来进行全局配置。
也可以通过服务名 .ribbon.xx 来对指定服务配置。
浏览器地址栏输入:http://127.0.0.1:9000/
会发现 product_service 有两个端口 9001 和 9011。

浏览器地址栏输入:http://127.0.0.1:9001/product/1
正常输出 mysql 数据库的第一条记录:

浏览器地址栏输入:http://127.0.0.1:9002/order/buy/1
正常输出 mysql 数据库的第一条记录:

可以发现使用 Ribbon 的轮询策略进行负载均衡。
# IDEA2019 如何打开 Run Dashboard 运行仪表面板
浏览器地址栏输入:http://127.0.0.1:9002/order/buy/1
多刷新几次,会发现,输出界面采用轮询的方式。

以减少通信过程中的性能损耗。通过配置参数即可开启请求与响应的压缩功能。
也可以对请求的数据类型,以及触发压缩的大小下限进行设置。
feign:
compression:
request:
enabled: true # 开启请求压缩
mime-types: text/html,application/xml,application/json # 设置压缩的数据类型,默认此几个类型。
min-request-size: 2048 # 设置触发压缩的大小下限,默认 2048。
response:
enabled: true # 开启响应压缩
# 配置 feign 日志的输出:
# 日志配置:
# NONE:不输出日志,
# BASIC:适用于生产环境追踪问题,
# HEADERS:在BASIC基础上记录请求和响应头信息,
# FULL:记录所有。
feign:
client:
config:
service-product: # 需要调用的服务名称
loggerLevel: FULL
logging:
level:
djh.it.order.feign.ProductFeignClient: debug
配置 fegin 日志,进行测试。
## spring_cloud_demo\order_service\src\main\resources\application.yml
server:
port: 9002 #端口
# port: ${port:9002} # 启动端口设置为动态传参,如果未传参数,默认端口为 9002
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
# url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8
username: 'root'
password: '012311'
application:
name: service-order #服务名称
jpa:
database: MySQL
show-sql: true
open-in-view: true
eureka: # 配置 Eureka
client:
service-url:
defaultZone: http://localhost:9000/eureka/
instance:
prefer-ip-address: true # 使用 ip 地址注册
instance-id: ${spring.cloud.client.ip-address}:${server.port}
# 配置 feign 日志的输出:
# 日志配置:NONE:不输出日志,BASIC:适用于生产环境追踪问题,HEADERS:在BASIC基础上记录请求和响应头信息,FULL:记录所有。
feign:
client:
config:
service-product: # 需要调用的服务名称
loggerLevel: FULL
logging:
level:
djh.it.order.feign.ProductFeignClient: debug
在 idea 控制台 Console 中查看日志信息。