目录
1、Feign与RestTemplate区别
(1) 声明式API
Feign支持使用接口和注解的方式来定义对其他服务的调用,使得代码更加清晰和易于理解
(2) 自动化的服务调用
Feign隐藏底层的HTTP请求细节,使得开发人员无需手动构建HTTP请求,简化了服务调用的过程
(3)支持熔断器
Feign内置了对Hystrix熔断器的支持,可以更容易地实现服务调用的熔断和降级
(4)可扩展性更强
Feign支持自定义的Encoder和Decoder,可以更加灵活地处理HTTP请求和响应
2、Feign配置超时和重试机制
(1)@FeignClient注解的connectTimeout和readTimeout属性配置超时
(2)Hystrix重试机制
Feign内置了对Hystrix熔断器的支持,可配置Hystrix的超时时间和重试次数来实现重试机制
(3)Retryer重试机制
Feign提供了内置的重试机制,包括Retryer.NEVER_RETRY和Retryer.DEFAULT(默认重试5次)
自定义重试策略:实现Retryer 接口
3、Feign配置熔断和降级
熔断器的作用是在服务调用出现异常或超时时,防止故障在分布式系统中蔓延,从而保护系统的稳定性。
(1)启用Feign的熔断器
在启动类或配置类上添加@EnableHystrix注解,以启用Feign的熔断器支持
(2)配置熔断器的属性
在配置文件中可以配置Hystrix的相关属性,如超时时间、错误阈值、熔断器打开后的降级处理
(3)@HystrixCommand降级配置
在Feign接口方法上添加@HystrixCommand注解,可以指定该方法的熔断和降级处理逻辑,异常或超时会执行@HystrixCommand注解中指定的降级方法
4、Feign配置日志级别
NONE:不记录。
BASIC:仅记录请求方法、URL、响应状态码以及执行时间。
HEADERS:除了BASIC级别的日志外,还记录请求和响应的头信息。
FULL:记录请求和响应的头信息以及正文,通常用于调试目的。
logging:
level:
feign: FULL
5、Feign中Decoder和Encoder作用
开发人员可以自定义Decoder和Encoder来实现特定的数据格式的处理,例如JSON、XML等
(1)Decoder:将HTTP响应解码转换为Java对象
(2)Encoder:Java对象转换为HTTP请求的内容
6、Feign拦截器Interceptor作用
用于在发起远程调用之前和之后对请求和响应进行处理
(1)添加、修改或删除请求的头部信息
(2)记录请求和响应的 日志
(3)对请求或响应进行 验证
(4)对请求进行 重试
(5)对错误进行处理
(6)在请求发送之前或者响应返回之后执行一些额外的逻辑
public class CustomInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
// 在这里可以对请求进行自定义的处理,例如添加认证信息、记录日志等
template.header("Authorization", "Bearer token");
}
}
7、为什么Feign第一次调用耗时很长
(1)第一次启动时的初始化耗时
一些初始化工作,包括创建动态代理类、解析接口注解、加载相关配置等耗时
(2)服务发现和负载均衡耗时
在第一次调用时,Feign可能需要进行服务发现和负载均衡的操作
(3) 连接建立耗时
(4)缓存冷启动:第一次调用时需要进行一些缓存操作,如缓存解析的服务地址或其他信息