簡體   English   中英

Java 異步依賴初始化庫

[英]Java library for asynchronous dependency initialization

我正在做一個用 Java 編寫的項目,它有一個內部編寫的依賴初始化系統。 我一直在尋找一個強大的第三方庫來管理它,這樣我們就不必對其進行太多維護。 到目前為止,我的搜索並不是很有幫助。 大多數結果都返回建議 Spring,但我認為這不能滿足我們的需求。

我們需要圖書館外的東西:

  • 維護系統中依賴項的“初始化狀態”。 這意味着如果每個“服務”,正如我所說的,都已經實例化,但可以未初始化、正在初始化、正在初始化。 其中大多數是單身人士。
  • 維護每個服務的依賴圖,並且僅在所有依賴項都已初始化時才嘗試初始化。
  • 最重要的是,這必須允許異步初始化。 當調用服務進行初始化時,庫不應期望在調用init()后完成此操作,而應允許服務回調。 這是因為大多數服務都在調用我們的 web 服務作為其初始化的一部分。
  • 系統需要支持未初始化。 例如。 如果我們失去與 web 服務的連接,或者您的 session 對於其中一項服務過期,我們需要能夠將其設置為未初始化,使依賴它的所有內容無效,並排隊等待重新初始化。
  • 系統應該允許在其當前 state 中分析系統,因此我們可以跟蹤初始化了什么,什么依賴於什么。

我已經看過 Spring 和 Guice,據我所知,它們不會工作,因為它們不允許您的依賴項處於中間初始化 state,如果您要求未初始化的,它們將阻塞線程object,直至完全建成。 我也不確定他們是否允許取消初始化。

我完全意識到這可能非常具體,並且可能是一個奇怪的系統(它很舊),所以我預計可能沒有內部解決方案的替代方案。

服務初始化邏輯的初始化程序。 這對於分布式服務非常有用,可以滿足以下幾個要求:

  • 先啟動服務,報健康 state
  • 初始化強制組件(數據庫、消息服務等)
    • 在不保持服務啟動的后台任務中。
    • 重試機制——每個組件,而不是所有組件一起。
  • 用於重試等待某些可以保持服務初始化的集群 state 的斷路器。
  • 可選的非強制組件可以在后台任務中重試和初始化,而無需阻止應用程序啟動和服務請求和/或執行其工作。
    • 僅在完成所有必需的組件初始化任務后才提供請求和/或執行工作。

在初始化期間,應用服務可以檢查組件的健康狀況並相應地反映出來。

由於它主要用於連接服務、重試機制和故障處理,因此依賴服務的健康檢查旨在單獨管理。

用法示例:

Initializer initializer = Initializer.builder().circuitBreaker(circuitBreaker)
    .mandatoryTask("initDB", () -> {return initDB();})
    .mandatoryTask("initMessagingService", () -> {return initMessagingService();})
    .nonMandatoryTask("initStats", () -> {return initStats();})
    .postInitTask("serveRequests", () -> {return serveRequests();})
    .build();
 initializer.initAsync();

注意:我是這個 Initializer 的作者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM