根据关于拉格姆的讨论之一,我在这个链接中读到了
实体在任何地方都不会持久化--这就是事件来源的关键所在,您只需存储事件,这些事件可以非常简单地实现,易于分发,并且具有非常高的性能,因为它只是一个附加操作。当需要加载实体时,将加载该实体的事件,以及您声明用于处理事件的事件处理程序,然后处理每个事件以生成当前的实体状态。
我的问题是,lagom如何识别哪些事件属于哪个实体。让我们举个例子:我有一个rest服务,为用户执行CRUD操作。对于事件源,我创建了一个UserEntity类,其中为CUD操作定义了不同的命令处理程序。现在,对于我来说,当应用程序运行时,lagom生成一个UserEntity类的实例。现在,如果我为" Alice“发出创建请求,并为" Bob”创建请求,然后为"Alice“发出更新请求,那么这里有两个实体,Alice和Bob。因此,lagom如何识别实体"Alice",有两个事件,创建和更新,而对于Bob,只有一个事件创建。以及它如何将事件绑定到实体?
发布于 2018-05-30 10:51:02
描述中的误解是,lagom没有创建一个UserEntity。正确的句子是:"Lagom为我的系统中的每个用户创建一个UserEntity实例“。
诀窍是,每当您想要向持久实体实例发送事件时,都必须按类型和ID请求实例:
PersistentEntityRegistry persistentEntities = ...;
PersistentEntityRef<UserCommand> refAlice =
persistentEntities.refFor(UserEntity.class, "Alice");
在上面的片段中,Lagom保证您发送给refAlice
的所有命令都将只由该实例处理。
然后,refAlice
发出的任何事件都将绑定到类和ID,因此它们不能与其他实例发出的事件混在一起。
https://stackoverflow.com/questions/50600558
复制