JVM上容錯庫的初步比較 - frankel
如果您正在實施微服務,那麼您很可能正在呼叫 HTTP 端點。使用 HTTP 呼叫,很多事情都可能出錯。經驗豐富的開發人員對此進行計劃並進行設計,而不僅僅是快樂的道路。一般來說,容錯包括以下特徵:
- 重試
- 暫停
- 斷路器
- 倒退
- 速率限制器以避免伺服器端 429 響應
- Bulkhead:速率限制器限制確定時間範圍內的呼叫數,而 Bulkhead 限制併發呼叫數
有幾個庫在 JVM 上實現了這些功能。在這篇文章中,我們將介紹 Microprofile Fault Tolerance、Failsafe和 Resilience4J。
Microprofile Fault Tolerance
Microprofile Fault Tolerance來自 Microprofile 傘形專案。它與其他兩個不同,因為它是一個規範,它依賴於執行時來提供其功能。例如,Open Liberty 就是這樣一種執行時。SmallRye 容錯是另一種。反過來,Quarkus 和 WildFly 等其他元件也嵌入了 SmallRye。
Microprofile為每個特徵定義註釋@Timeout: 、@Retry Policy、@Fallback、@Circuit Breaker和@Bulkhead。它還定義了@Asynchronous.
因為執行時讀取註解,所以應該仔細閱讀文件以瞭解如果設定了多個註解它們是如何互動的。
Resilience4J
Resilience4J 基於幾個核心概念:
- 每個容錯功能一個 JAR,以及用於特定整合的附加 JAR,例如Kotlin
- 靜態工廠
- 通過應用於函式的裝飾器模式進行函式組合
- 與 Java 的功能介面整合,例如, Runnable, Callable,Function等。
- 異常傳播:可以使用丟擲的功能介面,庫將在呼叫管道中傳播它
Failsafe
它的原則類似於 Resilience4J:靜態工廠、函式組合和異常傳播。
。Resilience4J 的 API 要求您首先提供“基礎”函式,然後將其嵌入到任何包裝函式中。但是這樣您酒不能在不同的基本功能之上重用管道,而FailsafeExecutorFailsafe 通過類允許它。
以下是建立管道的方法,即FailsafeExecutor. 請注意,沒有對基本呼叫的引用:
var pipeline = Failsafe.with( Fallback.of("fallback"), Timeout.ofDuration(Duration.of(2000, MILLIS)), RetryPolicy.ofDefault() ); |
Failsafe 還提供了一個流暢的 API。可以將上面的程式碼重寫為:
var pipeline = Failsafe.with(Fallback.of("fallback")) .compose(RetryPolicy.ofDefault()) .compose(Timeout.ofDuration(Duration.of(2000, MILLIS))); |
結論
所有三個庫都提供或多或少相同的功能。如果您不使用符合 CDI 標準的執行時,可以不用Microprofile Fault Tolerance。
Failsafe 和 Resilience4J 都基於函式組合並且非常相似。如果您需要獨立於基本呼叫定義函式管道,請首選 Failsafe。否則,選擇其中任何一個。
相關文章
- 檔案內容比較
- python比較json/dictionary的庫PythonJSON
- 主流資料庫比較資料庫
- 圖資料庫比較資料庫
- 3 個 Python 模板庫比較Python
- influxdb與傳統資料庫的比較UX資料庫
- 6個頂級Python NLP庫的比較!Python
- 比較兩個檔案,求出不同的內容,A-B
- 庫 vs 服務 vs 側車Sidecar的比較IDE
- Integer的比較
- Java幾種常用JSON庫效能比較JavaJSON
- 使用錯誤的運算子進行字串比較缺陷漏洞字串
- js 深比較和淺比較JS
- Go和Python比較的話,哪個比較好?GoPython
- Python NLP庫 Top6的介紹和比較Python
- Python NLP庫top6的介紹和比較Python
- 資料庫系列:MySQL引擎MyISAM和InnoDB的比較資料庫MySql
- 區塊鏈與分散式資料庫的比較區塊鏈分散式資料庫
- 集合類的比較
- 國內、國際比較不錯的PLM廠商有哪些?
- 磁碟資料庫與記憶體資料庫的特點比較資料庫記憶體
- .NET CORE下最快比較兩個檔案內容是否相同的方法
- 如何比較兩個資料庫表結構的不同資料庫
- Oracle date 型別比較和String比較Oracle型別
- 學什麼技術比較好呢?IT技術很不錯
- 字串比較字串
- Integer比較
- 比較集合
- 效能比較
- 比較典的莫比烏斯反演
- BootStrap, React, Vue的比較bootReactVue
- iOS 版本號的比較iOS
- 幾種排序的比較排序
- 比較重要的例題
- ==和equals方法的比較
- volatile與Atomic的比較
- 浮點數的比較
- ImageMagic 和 GraphicsMagick 的比較