从浅入深 学习 SpringCloud 微服务架构(六)Feign(2)
feign__3">一、feign 的配置:
1、从 Spring Cloud Edgware 开始,Feign 支持使用属性自定义 Feign。
对于一个指定名称的 FeignClient(例如该 Feign Client 的名称为 feignName)。
2、Feign 支持如下配置项:
feign:client:config:feignName: ## 定义 Feginclient 的名称connecttimeout: 5000 # 相当于Request.OptionsreadTimeout: 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.BarRequestInterceptordecode404: false
feign___24">3、feign 配置项 参数说明:
feignName : FeginClient 的名称。
connectTimeout : 建立链接的超时时长。
readTimeout : 读取超时时长。
loggerLevel : Fegin的日志级别。
errorDecoder : Feign的错误解码器。
retryer : 配置重试。
requestInterceptors : 添加请求拦截器。
decode404 : 配置熔断不处理404异常。
二、 Feign 和 Ribbon 的联系与区别:
1、Ribbon 是一个基于 HTTP 和 TCP 客户端的负载均衡的工具。
它可以在客户端配置 RibbonServerList (服务端列表),
使用 HttpClient 或 RestTemplate 模拟 http 请求,步骤相当繁琐。
2、Feign 是在 Ribbon 的基础上进行了一次改进,是一个使用起来更加方便的 HTTP 客户端。
feign 采用接口的方式,只需要创建一个接口,然后在上面添加注解即可,
将需要调用的其他服务的方法定义成抽象方法即可,不需要自己构建 http 请求。
然后就像是调用自身工程的方法调用,而感觉不到是调用远程方法,使得编写客户端变得非常容易。
3、负载均衡
Feign 中本身已经集成了 Ribbon 依赖和自动配置,
因此我们不需要额外引入依赖,也不需要再注册 RestTemplate对象。
另外,我们可以通过 ribbon.xx 来进行全局配置。
也可以通过服务名 .ribbon.xx 来对指定服务配置。
feign__55">三、feign 负载均衡测试
1、运行(eureka_service, order_service)两个启动类 和两个 product_service,进行测试
浏览器地址栏输入: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 数据库的第一条记录:
2、启动了两个 shop_service_product,重新测试
可以发现使用 Ribbon 的轮询策略进行负载均衡。
# IDEA2019 如何打开 Run Dashboard 运行仪表面板
浏览器地址栏输入:http://127.0.0.1:9002/order/buy/1
多刷新几次,会发现,输出界面采用轮询的方式。
feign____fegin__89">四、feign 请示压缩 和 打印 fegin 日志
1、Spring Cloud Feign 支持对请求和响应进行 GZIP 压缩,
以减少通信过程中的性能损耗。通过配置参数即可开启请求与响应的压缩功能。
也可以对请求的数据类型,以及触发压缩的大小下限进行设置。
feign:compression:request:enabled: true # 开启请求压缩mime-types: text/html,application/xml,application/json # 设置压缩的数据类型,默认此几个类型。min-request-size: 2048 # 设置触发压缩的大小下限,默认 2048。response:enabled: true # 开启响应压缩
2、fegin 日志配置:
# 配置 feign 日志的输出:
# 日志配置:# NONE:不输出日志,# BASIC:适用于生产环境追踪问题,# HEADERS:在BASIC基础上记录请求和响应头信息,# FULL:记录所有。feign:client:config:service-product: # 需要调用的服务名称loggerLevel: FULL
logging:level:djh.it.order.feign.ProductFeignClient: debug
3、在消费都子工程(子模块) order_service 中,application.yml 配置文件中,
配置 fegin 日志,进行测试。
## spring_cloud_demo\order_service\src\main\resources\application.ymlserver:port: 9002 #端口
# port: ${port:9002} # 启动端口设置为动态传参,如果未传参数,默认端口为 9002spring:datasource:driver-class-name: com.mysql.jdbc.Driver
# url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghaiurl: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8username: 'root'password: '012311'application:name: service-order #服务名称jpa:database: MySQLshow-sql: trueopen-in-view: trueeureka: # 配置 Eurekaclient: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
4、 浏览器地址栏输入:http://127.0.0.1:9002/order/buy/1
在 idea 控制台 Console 中查看日志信息。
上一节关联链接:
# 从浅入深 学习 SpringCloud 微服务架构(六)Feign(1)