OpenFeign

简介

Feign 是一个声明式的Web服务客户端,让编写Web服务客户端变得非常容易,只需要创建一个接口并在接口上添加注解即可。

image-20201122150928756

使用步骤

application.yml

1
2
3
4
5
6
7
server:
port: 80
eureka:
client:
register-with-eureka: false
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/

主启动类添加注解@EnableFeignClients

service层

1
2
3
4
5
6
7
8
9
@Component
@FeignClient(value = "CLOUD-PAYMENT-SERVICE")// *注明要调用的微服务名称
public interface PaymentFeignService {
@PostMapping("/payment/create") // *要调用的地址
public CommonResult<Integer> create(@RequestBody Payment payment);

@GetMapping("/payment/get/{id}")
public CommonResult<Payment> queryOne(@PathVariable("id") Long id);
}

controller层

1
2
3
4
5
6
7
8
9
10
11
@RestController
public class OrderFeignController {
// 注入feign调用接口
@Resource
private PaymentFeignService paymentFeignService;

@GetMapping("/customer/payment/get/{id}")
public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id){
return paymentFeignService.queryOne(id);
}
}

超时控制

默认超时报错时间:1s

application.yml

1
2
3
4
5
6
# 设置feign客户端超时时间(openFeign 默认支持 ribbon)
ribbon:
# 指的是建立连接使用的时间,适用于网络状况正常的情况下,两端的连接所用时间
ReadTimeout: 5000
# 指的是建立连接后从服务器读取到可用资源所用的时间
ConnectTimeout: 5000

日志增强

日志级别

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

FeignConfig.class

1
2
3
4
5
6
7
8
@Configuration
public class FeignConfig {

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

application.yml

1
2
3
4
logging:
level:
# 哪个接口:什么级别
com.tan.service.PaymentFeignService: debug

总结

  • 基本使用
    • 主启动类加@EnableFeignClients
    • Feign接口加@FeignClient(value = "服务名称")
    • Feign接口的方法头上加调用接口访问地址例如:@GetMapping("/payment/get/{id}")
  • 超时控制
    • 默认使用ribbon1s超时
    • 在配置文件中配置超时时间,参数:ribbon.ReadTimeoutribbon.ConnectTimeout
  • 日志增强
    • 配置类返回Logger.Level
    • 配置文件开启debug,例如:logging.level.com.tan.service.PaymentFeignService=debug