SpringBoot feign基于HttpStatus重试

server/2024/12/19 19:58:28/

场景

基于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();@Overridepublic 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 {@Beanpublic ErrorDecoder errorDecoder() {return new RemoteErrorDecoder();}// 重试器可以使用默认的  这边可以根据自己实际情况配置@Beanpublic 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 调用的接口
}

http://www.ppmy.cn/server/151527.html

相关文章

机器学习周报(12.9-12.15)

文章目录 摘要Abstract 1 Swin Transformer1.1 输入1.2 Patch Partition1.3 Linear Embedding1.4 Patch Merging1.5 Swin Transformer Block1.6 代码总结 摘要 本篇博客介绍了采用类似于卷积核的移动窗口进行图像特征提取的Swin Transformer网络模型,这是一种基于T…

前端使用xlsx.js实现 Excel 文件的导入与导出功能

前端使用xlsx.js实现 Excel 文件的导入与导出功能 在现代的 Web 开发中,处理文件上传和导出功能已经变得越来越常见,尤其是 Excel 文件的导入与导出。 我们将使用 Vue.js 和 XLSX.js 库来处理 Excel 文件的读取和生成。XLSX.js 是一个强大的 JavaScrip…

基于python对网页进行爬虫简单教程

python对网页进行爬虫 基于BeautifulSoup的爬虫—源码 """ 基于BeautifulSoup的爬虫### 一、BeautifulSoup简介1. Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要…

python模拟练习第一期

问题一 如果一个数 p 是个质数,同时又是整数 a的约数,则 p 称为 a的一个质因数。 请问 2024 有多少个质因数? 步骤 1: 分解 2024 首先,2024 是偶数,说明可以被 2 整除。我们从 2 开始进行除法分解: 202…

springcloud-gateway获取应用响应信息乱码

客户端通过springcloud gateway跳转访问tongweb上的应用,接口响应信息乱码。使用postman直接访问tongweb上的应用,响应信息显示正常。 用户gateway中自定义了实现GlobalFilter的Filter类,在该类中获取了上游应用接口的响应信息,直…

CRMEB PHP多商户版DOCKER部署实战

#首先,制作docker 镜像# 官方有一个镜像,但是拉不来下,也不知道是没是没有维护,嘎了。只能自己动手做一个。 这里选择ubuntu 24 为基础,制作crmeb-mer的镜像,Dockerfile内容如下: # 使用官方…

【AIGC】与模型对话:理解与预防ChatGPT中的常见误解

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯模型的工作原理和用户期望差异人工智能模型的基本工作原理认知上的局限与误解用户期望与模型实际能力的差距精确理解用户意图的重要性实际应用中的建议 &…

C#异常处理

异常处理 任何完美的应用程序和技术高明的程序员,都不能保证程序绝对不出差错,所以我们需要异常处理。通俗而言,程序中的错误可以分为以下3类: (1)编译错误 在程序编译时产生的错误,通常由错误的语法或使用的资源不存在等原因引…