1

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

 1 year ago
source link: https://www.jdon.com/61637
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

oskardudycz/EventSourcing.JVM:JVM语言中事件溯源的示例和教程
事件溯源是一种设计模式,其中业务操作的结果存储为一系列事件。
这是持久化数据的另一种方式。与仅保留最新版本的实体状态的面向状态的持久性相比,事件溯源将每个状态更改存储为单独的事件。
谢谢你,没有业务数据丢失。每个操作都会产生存储在数据库中的事件。这可以实现扩展的审计和诊断功能(技术和业务方面)。此外,由于事件包含业务上下文,它允许进行广泛的业务分析和报告。
在这个存储库中(点击标题),我展示了围绕事件溯源的不同方面和模式。从基础到高级实践。

事件(活动)
代表过去的事实。它们携带有关已完成某事的信息。

  • 是不可变的:“已经看到的,不可能是看不见的”。
  • 可以忽略但不能收回(因为你不能改变过去)。
  • 可以有不同的解释。篮球比赛的结果是事实。获胜的球队球迷会积极解读。

事件表现:消息
它们可以用例如JSON、二进制、XML 格式来表示。除了数据,它们通常包含:

  • id:唯一的事件标识符。
  • type:事件的名称,例如“发票开具”。
  • 流 id:为其注册事件的对象 id(例如发票 id)。
  • 流位置(也称为版本、发生顺序等):用于决定特定对象(流)的事件发生顺序的数字。
  • 时间戳:表示事件发生的时间。
  • 其他元数据,如correlation id,causation id等。

从事件中检索当前状态
要获取实体的当前状态,我们需要执行流聚合过程。我们正在将一组事件转换为一个实体。这可以通过以下步骤完成:

  1. 读取特定流的所有事件。
  2. 按出现顺序(按事件的流位置)升序排列它们。
  3. 构造实体类型的空对象(例如使用默认构造函数)。
  4. 将每个事件应用于实体。

此过程也称为流聚合或状态再水化。

活动存储
事件溯源与任何类型的存储实现无关。只要它满足假设,就可以使用任何支持数据库(关系、文档等)来实现。状态必须由仅附加的事件日志表示。事件按时间顺序存储,新事件附加到前一个事件。事件存储是专门为此目的设计的数据库类别。
在进一步的示例中,我将使用EventStoreDB。它是由 Event Sourcing 当局创建和维护的久经考验的 OSS 数据库。它通过 gRPC 客户端支持许多开发环境,包括 JVM。

详细点击标题


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK