博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringCloud--OpenFeign服务调用、超时控制、日志打印
阅读量:2443 次
发布时间:2019-05-10

本文共 4070 字,大约阅读时间需要 13 分钟。

cloud-consumer-feign-order80模拟调用模块

依赖:

cloud2020
pers.zhang.springcloud
1.0-SNAPSHOT
4.0.0
cloud-consumer-feign-order80
org.springframework.cloud
spring-cloud-starter-openfeign
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
pers.zhang.springcloud
cloud-api-commons
${project.version}
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-devtools
runtime
true
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test

配置:application.yml

server:  port: 80eureka:  client:    register-with-eureka: false    service-url:      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/

接口:

@Component@FeignClient(value = "CLOUD-PAYMENT-SERVICE")//指定注册中心的服务名public interface PaymentFeignService {
@GetMapping(value = "/payment/get/{id}") public CommonResult
getPaymentById(@PathVariable("id") Long id);}

使用@FeignClient指定被调用的服务名:

在这里插入图片描述
接口方法与提供服务方暴露的接口一致:
在这里插入图片描述

Controller:

@RestController@Slf4jpublic class OrderFeignController {
@Resource PaymentFeignService paymentFeignService; @GetMapping(value = "/consumer/payment/get/{id}") public CommonResult
getPaymentById(@PathVariable("id") Long id) {
return paymentFeignService.getPaymentById(id); }}

启动类:

@SpringBootApplication@EnableDiscoveryClient@EnableFeignClients//开启Feignpublic class OrderFeignMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderFeignMain80.class, args); }}

测试

启动Eureka,启动被调用的微服务,再启动80端口的调用方:

访问:localhost/consumer/payment/get/35
在这里插入图片描述
再次查询:
在这里插入图片描述

Feign继承了Ribbon负载均衡,默认使用轮询策略。

OpenFeign的超时控制

提供服务方新增方法模拟超时:

在这里插入图片描述
PaymentFeignService中新增对应接口方法:
在这里插入图片描述
Controller中增加对应方法:
在这里插入图片描述

在服务提供方本地测试:

访问:localhost:8001/payment/feign/timeout:3秒后返回结果如下:

在这里插入图片描述

使用Feign在80端口调用8001端口的服务:

访问:localhost/consumer/payment/feign/timeout
在这里插入图片描述

因为OpenFeign默认等待时间为1秒,但是服务端处理需要超过1秒,导致Feign客户端不再等待,直接返回报错。

为了避免这种情况,有时候需要设置Feign客户端的超时控制。

修改application.yml

server:  port: 80eureka:  client:    register-with-eureka: false    service-url:      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/#设置feign客户端超时时间(OpenFeign集成了ribbon,超时由ribbon控制)ribbon:  #指的是建立连接所用的时间,适用于网络正常的情况下,两端连接所用的时间  ReadTimeout: 5000  #指的是建立连接后从服务器读取到可用资源所用的时间  ConnectTimeout: 5000logging:  level:    # feign日志以什么级别监控哪个接口    pers.zhang.springcloud.service.PaymentFeignService: debug

重启80服务,再次访问localhost/consumer/payment/feign/timeout,3秒后返回信息

在这里插入图片描述

OpenFeign日志打印

Fei提供了日志打印功能,可以通过配置来调整日志级别,从而了解Feign中Http请求的细节。

日志级别:

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

新增配置类:(指定日志级别)

@Configurationpublic class FeignConfig {
@Bean Logger.Level feignLoggerLevel() {
return Logger.Level.FULL; }}

在application.yml中开启日志,同时指定监控的接口

logging:  level:    # feign日志以什么级别监控哪个接口    pers.zhang.springcloud.service.PaymentFeignService: debug

启动服务,访问localhost/consumer/payment/get/35

在这里插入图片描述

转载地址:http://qspqb.baihongyu.com/

你可能感兴趣的文章
实验-闪回数据库
查看>>
实验-闪回表
查看>>
oracle审计
查看>>
typeof运算符_JavaScript typeof运算子
查看>>
react 前端拆分_React中的代码拆分
查看>>
叶节点到根节点的路径_节点路径模块
查看>>
前端测试简介
查看>>
如何查找公共子字符串长度_如何在C中查找字符串的长度
查看>>
javascript运算符_JavaScript比较运算符
查看>>
字符串tostring_字符串toString()方法
查看>>
number.isnan_Number isNaN()方法
查看>>
虚拟dom_虚拟DOM
查看>>
vue组件引入scss变量_如何将SCSS与Vue.js单个文件组件一起使用
查看>>
开发人员,学习营销
查看>>
axios 请求node_使用Axios的Node中的HTTP请求
查看>>
setimmediate_了解setImmediate()
查看>>
git可视化工具使用_使用Go可视化您本地的Git贡献
查看>>
JavaScript中的call()和apply()
查看>>
node 发出ajax请求_使用Node发出HTTP请求
查看>>
成为独立开发者
查看>>