OpenFenix介绍
- 负责服务接口调用
- 不属于SpringCloud Netflix
- 替代了SpringCloud Netflix的中的Feign
- Feign是一个声明式的WebService客户端
- 使用Feign只需要创建一个接口并添加MVC注解即可
- Feign自己集成了Ribbon
使用OpenFeign
- 引入依赖
- 创建接口并添加MVC注解
- 启动类添加注解——@EnableFeignClients
依赖
dependency
groupIdorg.springframework.cloud/groupId
artifactIdspring-cloud-starter-openfeign/artifactId
/dependency
接口
@FeignClient(name = "提供者的spring.application.name")
public interface PaymentFeignService {
@GetMapping("/payment/get/{id}")
CommonResult getPaymentById(@PathVariable(value = "id") Long id);
}
OpenFeign的超时控制
Feign只会等待一秒如果一秒没有结果就会报错,可以通过配置底层Ribbon来控制
ribbon:
ReadTimeout: 5000
ConnectTimeout: 5000
OpenFeign的日志打印
- OpenFeign的日志级别有4个:NONE,BASIC,HEADERS,FULL。
- NONE——默认的不显示任何日志
- BASIC——记录请求方法,URL,响应状态码,执行时间
- HEADERS——除了BASIC有的还有请求和响应的头信息
- FULL——除了HEADERS有的还有请求和响应的正文及元数据
- 配置方式如下:
@Configuration
public class FeignConfig {
@Bean
Logger.Level level(){
return Logger.Level.FULL;
}
}
logging:
level:
cn.shanguoyu.springcloud.service.PaymentFeignService: debug
OpenFeign配置负载均衡
- Feign集成了Ribbon,默认通过轮询实现客户端负载均衡。
- 修改consumer的配置文件即可
提供者的名字.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
注意事项
- 在实际使用中会把Feign接口定义到通用模块中去来复用
- @PathVariable注解必须添加value
- @RequestMapping注解中的URL必须与provider中一致
- @RequestMapping不能修饰接口,否则404