oskardudycz/EventSourcing.JVM:JVM語言中事件溯源的示例和教程

banq發表於2022-07-25

事件溯源是一種設計模式,其中業務操作的結果儲存為一系列事件。
這是持久化資料的另一種方式。與僅保留最新版本的實體狀態的面向狀態的永續性相比,事件溯源將每個狀態更改儲存為單獨的事件。
謝謝你,沒有業務資料丟失。每個操作都會產生儲存在資料庫中的事件。這可以實現擴充套件的審計和診斷功能(技術和業務方面)。此外,由於事件包含業務上下文,它允許進行廣泛的業務分析和報告。
在這個儲存庫中(點選標題),我展示了圍繞事件溯源的不同方面和模式。從基礎到高階實踐。

事件(活動)
代表過去的事實。它們攜帶有關已完成某事的資訊。

  • 是不可變的:“已經看到的,不可能是看不見的”。
  • 可以忽略但不能收回(因為你不能改變過去)。
  • 可以有不同的解釋。籃球比賽的結果是事實。獲勝的球隊球迷會積極解讀。


事件表現:訊息
它們可以用例如JSON、二進位制、XML 格式來表示。除了資料,它們通常包含:

  • id:唯一的事件識別符號。
  • type:事件的名稱,例如“發票開具”。
  • 流 id:為其註冊事件的物件 id(例如發票 id)。
  • 流位置(也稱為版本、發生順序等):用於決定特定物件(流)的事件發生順序的數字。
  • 時間戳:表示事件發生的時間。
  • 其他後設資料,如correlation id,causation id等。

從事件中檢索當前狀態
要獲取實體的當前狀態,我們需要執行流聚合過程。我們正在將一組事件轉換為一個實體。這可以透過以下步驟完成:

  1. 讀取特定流的所有事件。
  2. 按出現順序(按事件的流位置)升序排列它們。
  3. 構造實體型別的空物件(例如使用預設建構函式)。
  4. 將每個事件應用於實體。

此過程也稱為流聚合或狀態再水化。

活動儲存
事件溯源與任何型別的儲存實現無關。只要它滿足假設,就可以使用任何支援資料庫(關係、文件等)來實現。狀態必須由僅附加的事件日誌表示。事件按時間順序儲存,新事件附加到前一個事件。事件儲存是專門為此目的設計的資料庫類別。
在進一步的示例中,我將使用EventStoreDB。它是由 Event Sourcing 當局建立和維護的久經考驗的 OSS 資料庫。它透過 gRPC 客戶端支援許多開發環境,包括 JVM。

詳細點選標題
 

相關文章