SpringBoot feign基于HttpStatus重试

场景

基于springboot开发的项目,对接第三方,第三方的接口有限流策略,某个时间段内有调用频率限制,返回的状态码HttpStatus不是200,而HttpStatus是429。现基于HttpStatus我们发起的重试。

技术点

  1. springboot
  2. feign
    feign要基于HttpStatus重试。

实现

一般我不喜欢配置全局的配置,因为feign的客户端可能会有多个,如果只有一个第三方服务,那可以配置全局的。

  1. 基于HttpStatus为429的解码器
java 复制代码
@Slf4j
public class RemoteErrorDecoder implements ErrorDecoder {
    private static final int TOO_MANY_REQUESTS_CODE = 429;

    private final ErrorDecoder defaultErrorDecoder = new ErrorDecoder.Default();

    @Override
    public Exception decode(String methodKey, Response response) {
        if (response.status() == TOO_MANY_REQUESTS_CODE) {
            log.error("请求因为限流被拒绝,methodKey:{},status:{}", methodKey, response.status());
            return new RetryableException(TOO_MANY_REQUESTS_CODE, "请求因为限流被拒绝", response.request().httpMethod(), null,
                response.request());
        } else {
            log.error("其他状态码,methodKey:{},status:{}", methodKey, response.status());
            return defaultErrorDecoder.decode(methodKey, response);
        }
    }
}
  1. feign配置类
java 复制代码
public class RemoteFeignConfig {
    @Bean
    public ErrorDecoder errorDecoder() {
        return new RemoteErrorDecoder();
    }
		// 重试器可以使用默认的  这边可以根据自己实际情况配置
    @Bean
    public Retryer retryer() {
        return new Retryer.Default(30000, 30000, 3);
    }
}
  1. feign client
java 复制代码
@FeignClient(name = "xxx", url = "xxx", configuration = RemoteFeignConfig.class)
public interface RemoteService {
  // TODO 调用的接口
}
相关推荐
264玫瑰资源库9 分钟前
问道数码兽 怀旧剧情回合手游源码搭建教程(反查重优化版)
java·开发语言·前端·游戏
pwzs19 分钟前
Java 中 String 转 Integer 的方法与底层原理详解
java·后端·基础
东阳马生架构21 分钟前
Nacos简介—2.Nacos的原理简介
java
普if加的帕34 分钟前
java Springboot使用扣子Coze实现实时音频对话智能客服
java·开发语言·人工智能·spring boot·实时音视频·智能客服
爱喝一杯白开水1 小时前
SpringMVC从入门到上手-全面讲解SpringMVC的使用.
java·spring·springmvc
王景程1 小时前
如何测试短信接口
java·服务器·前端
〆、风神1 小时前
Spring Boot 整合 Lock4j + Redisson 实现分布式锁实战
spring boot·分布式·后端
zhang23839061542 小时前
IDEA add gitlab account 提示
java·gitlab·intellij-idea·idea
橘猫云计算机设计2 小时前
springboot基于hadoop的酷狗音乐爬虫大数据分析可视化系统(源码+lw+部署文档+讲解),源码可白嫖!
数据库·hadoop·spring boot·爬虫·python·数据分析·毕业设计
牛马baby2 小时前
Java高频面试之并发编程-07
java·开发语言·面试