根据Lagom概念上的一个讨论,我在这里阅读link
实体不会在任何地方持久存在 - 这就是事件的重点 采购,您只需存储可以实施的事件 简单地说,易于分发,并以非常高的性能完成 因为它只是一个追加操作。当一个实体需要时 加载,加载该实体的事件,以及事件处理程序 您已声明处理事件然后处理每个事件 产生当前的实体状态。
我的问题是lagom如何识别哪个事件属于哪个实体。让我们举一个例子: 我有一个休息服务,为用户执行CRUD操作。对于事件源,我创建了一个UserEntity类,我在其中为CUD操作定义了不同的命令处理程序。 现在,对于我来说,当应用程序运行时,lagom会生成一个UserEntity类的实例。现在,如果我触发创建“Alice”请求并创建“Bob”请求,然后是“Alice”的更新请求,则此处有两个实体,Alice和Bob。那么lagom如何识别实体“Alice”,有两个事件,创建和更新,而对于Bob,只创建了一个事件。它如何将事件绑定到实体?
答案 0 :(得分:1)
对您的描述的误解是,lagom不会创建 UserEntity 。正确的句子是:" Lagom为我系统中的每个用户创建一个UserEntity实例"。
诀窍在于,无论何时您想要将事件发送到持久性实体实例,您都必须按类型和ID请求实例:
PersistentEntityRegistry persistentEntities = ...;
PersistentEntityRef<UserCommand> refAlice =
persistentEntities.refFor(UserEntity.class, "Alice");
在上面的代码段中,Lagom保证您发送给refAlice
的所有命令都只会被该实例处理。
然后,refAlice
发出的任何事件都将绑定到类和ID,以便它们不会与其他实例发出的事件混淆。