Feign
Feign可帮助我们更加便捷,优雅的调用HTTP API。(替代RestTemplate)
即 在Order微服务 可以直接调用product微服务的ProductController中方法。
feign已经继承了Ribbon依赖和自动配置。
- 服务消费者引入spring-cloud-starter-openfeign 依赖
- 通过@FeignClient 声明一个调用远程微服务接口
- 启动类上通过@EnableFeignClients 激活Feign
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
一、依赖
在服务消费者中引入feign依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
二、OrderApplication启动类添加Feign的支持
@SpringBootApplication
//@EnableFeignClients
@EnableFeignClients
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
三、启动类激活FeignClient
在服务消费者Order服务中 创建一个Feign接口,是用来请求product微服务
package xyz.gsdn.order.feign;
//指定需要调用的微服务名称
@FeignClient(name="service-product")
public interface ProducrFeignClient {
//调用的请求路径
@RequestMapping(value = "/product/{id}",method = RequestMethod.GET)
public Product findById(@PathVariable("id") Long id);
}
四、OrderController中配置请求提供者的调用接口
- 注入ProductFeginClient对象
- Order微服务 使用ProductFeginClient直接调用product的服务方法
@RestController
@RequestMapping("/order")
public class OrderController {
//1.注入FeignClient对象
@Autowired
private ProductFeginClient productFeginClient;
@GetMapping("/buy/{id}")
public Product order(@PathVariable Long id) {
//2.Order微服务 使用FeignClient请求product服务方法
return productFeginClient.findById(id);
}
}
关于Feign的配置,可以不配置使用默认
feign:
client:
config:
feignName: ##定义FeginClient的名称
connectTimeout: 5000 # 相当于Request.Options建立链接的超时时长
readTimeout: 5000 # 相当于Request.Options读取超时时长
# 配置Feign的日志级别,相当于代码配置方式中的Logger
loggerLevel: full
# Feign的错误解码器,相当于代码配置方式中的ErrorDecoder
errorDecoder: com.example.SimpleErrorDecoder
# 配置重试,相当于代码配置方式中的Retryer
retryer: com.example.SimpleRetryer
# 配置拦截器,相当于代码配置方式中的RequestInterceptor
requestInterceptors:
- com.example.FooRequestInterceptor
- com.example.BarRequestInterceptor
decode404: false
请求压缩配置
feign:
compression:
request:
enabled: true # 开启请求压缩
mime-types: text/html,application/xml,application/json # 设置压缩的数据类型
min-request-size: 2048 # 设置触发压缩的大小下限
response:
enabled: true # 开启响应压缩
日志级别
feign:
client:
config:
shop-service-product:
loggerLevel: FULL
logging:
level:
cn.itcast.order.fegin.ProductFeginClient: debug
logging.level.xx : debug : Feign日志只会对日志级别为debug的做出响应
feign.client.config.shop-service-product.loggerLevel : 配置Feign的日志Feign有四种:
- NONE【性能最佳,适用于生产】:不记录任何日志(默认值)
- BASIC【适用于生产环境追踪问题】:仅记录请求方法、URL、响应状态代码以及执行时间
- HEADERS:记录BASIC级别的基础上,记录请求和响应的header。
- FULL【比较适用于开发及测试环境定位问题】:记录请求和响应的header、body和元数
据。
项目源码:https://gitee.com/hxmkd/spring-cloud/tree/master/study_springcloud4-feign