OkHttpClient 的简单配置,包含重试,线程池
@Configuration
public class OkHttpConfig {@Bean("deSourceOkHttp")public OkHttpClient okHttpClient() {return new OkHttpClient.Builder().connectTimeout(60, TimeUnit.SECONDS).readTimeout(30, TimeUnit.SECONDS).writeTimeout(30, TimeUnit.SECONDS).addInterceptor(new SmartRetryInterceptor(3,1000,true)).connectionPool(new ConnectionPool(50, 1, TimeUnit.MINUTES)).addInterceptor(chain -> chain.proceed(chain.request().newBuilder().addHeader("Accept", "application/json").addHeader("Content-Type", "application/json").build())).build();}
}

重试

public class SmartRetryInterceptor implements Interceptor {private final int maxRetries;private final long baseDelayMs;private final boolean enableJitter;public SmartRetryInterceptor(int maxRetries, long baseDelayMs, boolean enableJitter) {this.maxRetries = maxRetries;this.baseDelayMs = baseDelayMs;this.enableJitter = enableJitter;}@Overridepublic Response intercept(Chain chain) throws IOException {Request request = chain.request();Response response = null;IOException exception = null;for (int i = 0; i <= maxRetries; i++) {try {response = chain.proceed(request);if (isSuccessfulOrShouldNotRetry(response)) {return response;}} catch (IOException e) {exception = e;}// 如果是幂等请求或满足特定条件,才重试if (isIdempotent(request) && i < maxRetries) {long delay = baseDelayMs * (1 << i); // 指数退避if (enableJitter) {delay += new Random().nextInt((int) (baseDelayMs * 0.5));}try {Thread.sleep(delay);} catch (InterruptedException e) {Thread.currentThread().interrupt();throw new IOException("重试中断", e);}} else {break;}}if (response != null) {return response;}throw exception;}private boolean isSuccessfulOrShouldNotRetry(Response response) {return response.isSuccessful() || !shouldRetry(response.code());}private boolean shouldRetry(int code) {return retryhttpCpde.containsKey(code);}private boolean isIdempotent(Request request) {String method = request.method();return "GET".equals(method) || "POST".equals(method) ;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/86851.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86851.shtml
英文地址,请注明出处:http://en.pswp.cn/web/86851.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

群晖nas安装moodle跳坑记录

1&#xff0c;套件里面直接安装 会安装好几个依赖&#xff0c;包括php apach &#xff0c;数据库。这些安装的时间就比较长。 安装完成后自动安装 Moodle。 过程也很长数据库里面的表有接近500张。 2&#xff0c;安装位置 顺便提一下 nas程序的安装位置 这两个位置好像都不是…

鸿蒙HarmonyOS 5小游戏实践:打砖块游戏(附:源代码)

打砖块是一款经典的游戏&#xff0c;它简单易懂却又充满挑战性。本文将介绍如何使用ArkUI框架开发一个完整的打砖块游戏&#xff0c;涵盖游戏逻辑设计、UI实现和交互处理等核心内容。 游戏架构设计 我们的打砖块游戏采用了组件化设计&#xff0c;主要分为两个部分&#xff1a;…

Flutter MobX 响应式原理与实战详解

&#x1f4da; Flutter 状态管理系列文章目录 Flutter 状态管理(setState、InheritedWidget、 Provider 、Riverpod、 BLoC / Cubit、 GetX 、MobX 、Redux) setState() 使用详解&#xff1a;原理及注意事项 InheritedWidget 组件使用及原理 Flutter 中 Provider 的使用、注…

浅谈国产数据库多租户方案:提升云计算与SaaS的资源管理效率

近年来&#xff0c;“数据库多租户”这一概念在技术圈内频频出现&#xff0c;成为云计算和SaaS&#xff08;软件即服务&#xff09;架构中的重要组成部分。多租户架构不仅为企业提供了高效的资源隔离与共享解决方案&#xff0c;还能大幅降低成本&#xff0c;提高系统的可扩展性…

Wpf的Binding

前言 wpf的Binding就像一个桥梁&#xff0c;它的作用就是连接逻辑层与界面层&#xff0c;既能够把逻辑层的数据搬到界面层展示&#xff0c;又能将界面层的数据更改后传递到逻辑层&#xff0c;Binding的数据来源就是Binding的源&#xff0c;数据展示的地方就是Binding的目标。 …

嵌入式单片机中SPI串行外设接口控制与详解

串行外设接口(Serial Peripheral Interface)的简称也叫做SPI,是一种高速的、全双工同步通信的一种接口,串行外设接口一般是需要4根线来进行通信(NSS、MISO、MOSI、SCK),但是如果打算实现单向通信(最少3根线),就可以利用这种机制实现一对多或者一对一的通信。 第一:…

【世纪龙科技】新能源汽车动力电池总成装调与检修教学软件

在新能源汽车产业“技术迭代快、安全要求高、实操风险大”的背景下&#xff0c;职业院校如何以“项目式教学改革”为突破口&#xff0c;破解传统实训“高成本、高风险、低效率”的困局&#xff1f;江苏世纪龙科技以桌面VR沉浸式技术为支点&#xff0c;推出《新能源动力电池总成…

GO泛型编程面试题及参考答案

目录 什么是 Go 中的泛型?Go 从哪个版本开始支持泛型? 在 Go 中如何定义一个带类型参数的函数? 如何为结构体添加类型参数? 使用 any 关键字和自定义类型约束有什么区别? 泛型中~T 的语义及其实际应用是什么? 如何在函数中使用多个类型参数?举例说明。 Go 泛型支…

ReactRouter-404路由配置以及两种路由模式

404路由 场景&#xff1a;当浏览器输入url的路径在整个路由配置中都找不到对应的path&#xff0c;为了用户体验&#xff0c;可以使用404兜底组件进行渲染 实现步骤 准备一个404组件在路由表数组的末尾&#xff0c;以*号作为路由path配置路由 新建404组件 const NotFound (…

《Kubernetes》Service 详解+Ingress

主要介绍kubernetes的流量负载组件&#xff1a;Service和Ingress。 1. Service 1.1 Service介绍 在kubernetes中&#xff0c;pod是应用程序的载体&#xff0c;我们可以通过pod的ip来访问应用程序&#xff0c;但是pod的ip地址不是固定的&#xff0c;这也就意味着不方便直接采用…

常见网络知识,宽带、路由器

常见网络知识&#xff0c;宽带、路由器 1、关于光猫、桥接和路由接法 现在的光猫都带有路由功能&#xff0c;即光猫、路由一体。不需要路由器也能让设备连上&#xff0c;但是一般来说路由功能穿墙有限&#xff0c;放在弱电箱/多媒体箱里的光猫发射出来的wifi信号其实是很难在…

Android应用缓存清理利器:WorkManager深度实践指南

本文将带你全面掌握使用WorkManager实现缓存清理的技术方案&#xff0c;从基础原理到性能优化&#xff0c;提供完整代码实现和工程实践指南 一、缓存清理的必要性与挑战 在Android应用开发中&#xff0c;缓存管理是优化应用性能的关键环节。随着应用使用时间增长&#xff0c;缓…

如何理解构件“可独立部署”的特性

构件的“可独立部署”特性是其区别于普通代码模块的核心特征之一&#xff0c;我们可以通过生活案例和技术原理解释来理解这一特性&#xff1a; 一、生活类比&#xff1a;从“家电维修”看独立部署 假设你家的空调坏了&#xff0c;维修时只需拆开空调外机更换压缩机&#xff0…

uni-app subPackages 分包加载:优化应用性能的利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

CentOS 8 安装第二个jdk隔离环境

1.适用于原本已经装了jdk8&#xff0c;现在需要安装jdk17&#xff1a; 多版本 JDK 共存不希望修改系统默认 JavaDocker 或脚本化部署 2. 下载 Adoptium&#xff08;原 AdoptOpenJDK&#xff09; 的 OpenJDK 17&#xff1a; cd /指定目录 sudo wget https://github.com/adopti…

Day.43

getitem方法&#xff1a; class MyList: def __init__(self): self.data [10, 20, 30, 40, 50] def __getitem__(self, idx): return self.data[idx] my_list_obj MyList() print(my_list_obj[2]) len方法&#xff1a; class MyList: def __init__(self): self.data [10…

三七互娱GO面经及参考答案

MySQL 有哪些存储引擎?MyISAM 如何存储数字类型数据? MySQL 拥有多种存储引擎,每种都有其独特的特性和适用场景。常见的存储引擎包括 InnoDB、MyISAM、Memory、CSV、Archive、Federated 等。 InnoDB 是 MySQL 5.5 版本之后的默认存储引擎,它支持事务、外键、行级锁和崩溃恢…

git常见问题汇总-重复提交/删除已提交文件等问题

git常见问题汇总&#xff1a; 1&#xff0c;已经commit的文件需要修改 /删除&#xff0c;应该怎么处理&#xff1f; 2&#xff0c;自己建的分支“branch1”显示“rebasing branch1”&#xff0c;这是什么情况&#xff1f; 3&#xff0c;由于内容修改/优化&#xff0c;在同一个…

Python实例题:简单的 Web 服务器

目录 Python实例题 题目 要求&#xff1a; 解题思路&#xff1a; 代码实现&#xff1a; Python实例题 题目 简单的 Web 服务器 要求&#xff1a; 使用 Python 的 socket 模块实现一个简单的 HTTP 服务器。支持以下功能&#xff1a; 处理 GET 和 POST 请求静态文件服务…

3.Stable Diffusion WebUI本地部署和实践

本文看了(68 封私信) 逼真的图片生产 | Stable Diffusion WebUI本地部署看这一篇就够了 - 知乎和(68 封私信) Stable Diffusion WebUI 实践: 基本技法及微调 - 知乎&#xff0c;本人根据它们部署了一遍&#xff0c;中间遇到一些报错&#xff0c;但根据报错提示解决了问题&#…