lagom如何识别哪个事件属于哪个实体

时间:2018-05-30 09:02:09

标签: cqrs event-sourcing lagom

根据Lagom概念上的一个讨论,我在这里阅读link

  

实体不会在任何地方持久存在 - 这就是事件的重点   采购,您只需存储可以实施的事件   简单地说,易于分发,并以非常高的性能完成   因为它只是一个追加操作。当一个实体需要时   加载,加载该实体的事件,以及事件处理程序   您已声明处理事件然后处理每个事件   产生当前的实体状态。

我的问题是lagom如何识别哪个事件属于哪个实体。让我们举一个例子: 我有一个休息服务,为用户执行CRUD操作。对于事件源,我创建了一个UserEntity类,我在其中为CUD操作定义了不同的命令处理程序。 现在,对于我来说,当应用程序运行时,lagom会生成一个UserEntity类的实例。现在,如果我触发创建“Alice”请求并创建“Bob”请求,然后是“Alice”的更新请求,则此处有两个实体,Alice和Bob。那么lagom如何识别实体“Alice”,有两个事件,创建和更新,而对于Bob,只创建了一个事件。它如何将事件绑定到实体?

1 个答案:

答案 0 :(得分:1)

对您的描述的误解是,lagom不会创建 UserEntity 。正确的句子是:" Lagom为我系统中的每个用户创建一个UserEntity实例"。

诀窍在于,无论何时您想要将事件发送到持久性实体实例,您都必须按类型和ID请求实例:

PersistentEntityRegistry persistentEntities = ...;
PersistentEntityRef<UserCommand> refAlice = 
  persistentEntities.refFor(UserEntity.class, "Alice");

在上面的代码段中,Lagom保证您发送给refAlice的所有命令都只会被该实例处理。

然后,refAlice发出的任何事件都将绑定到类和ID,以便它们不会与其他实例发出的事件混淆。