OkHttp 簡單配置

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;但根據報錯提示解決了問題&#…