首页 文章

lagom如何识别哪个事件是针对哪个实体的

提问于
浏览
0

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

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

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

1 回答

  • 1

    对你的描述的误解是,lagom不会创建UserEntity . 正确的句子是:"Lagom creates one instance of UserEntity for each user in my system" .

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

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

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

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

相关问题