深入理解SpringCloud:Feign详解

目录

1、Feign与RestTemplate区别

2、Feign配置超时和重试机制

3、Feign配置熔断和降级

4、Feign配置日志级别

5、Feign中Decoder和Encoder作用

6、Feign拦截器Interceptor作用

7、为什么Feign第一次调用耗时很长


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)缓存冷启动:第一次调用时需要进行一些缓存操作,如缓存解析的服务地址或其他信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值