cqrs - lagom 如何识别哪些事件是针对哪个实体的
问题描述
根据概念上关于 Lagom 的讨论之一,我在此链接中阅读
实体不会在任何地方持久化 - 这是事件源的重点,您只需存储事件,这可以非常简单地实现,易于分发,并且由于它只是一个附加操作而以非常高的性能完成。当需要加载实体时,将加载该实体的事件,然后您声明用于处理事件的事件处理程序处理每个事件以生成当前实体状态。
我的问题是 lagom 如何识别哪些事件属于哪个实体。举个例子:我有一个为用户执行 CRUD 操作的休息服务。对于事件溯源,我创建了一个 UserEntity 类,我在其中为 CUD 操作定义了不同的命令处理程序。现在,对于我来说,当应用程序运行时,lagom 会生成一个 UserEntity 类的实例。现在,如果我为“Alice”发起创建请求并为“Bob”创建请求,然后为“Alice”创建更新请求,这里有两个实体,Alice 和 Bob。那么 lagom 如何识别实体“Alice”,创建和更新了两个事件,而对于 Bob,只创建了一个事件。它如何将事件绑定到实体?
解决方案
对您的描述的误解是 lagom 没有创建UserEntity。正确的句子是:“Lagom 为我系统中的每个用户创建一个 UserEntity 实例”。
诀窍是,无论何时您想向持久实体实例发送事件,都必须按类型和 ID 请求实例:
PersistentEntityRegistry persistentEntities = ...;
PersistentEntityRef<UserCommand> refAlice =
persistentEntities.refFor(UserEntity.class, "Alice");
在上面的代码片段中,Lagom 保证您发送到的所有命令refAlice
将仅由该实例处理。
然后,由 发出的任何事件refAlice
都将绑定到类和 ID,因此它们不能与其他实例发出的事件混淆。
推荐阅读
- eclipse-plugin - JBoss Tools 4.16.0 Final 完全冻结 Eclipse 4.16 (2020-06)
- list - 使用过滤器函数生成一个列表,输出两个列表的非公共元素
- python - 为什么更改一个对象的属性会更改同一类中不同对象的属性?
- javascript - 如何解决此错误;'document.getElementById('myChart').getContext' 未定义)?
- python - 我无法导入熊猫,因为我不断收到一个奇怪的错误
- android - AOSP 启动完成后显示“免责声明”屏幕
- python - 当我在 Python 中向调制解调器发送串行端口消息时,整数返回值是什么意思?
- visual-studio - 设置智能感知延迟(VS 2019)
- javascript - 使用 map() 方法创建的数组的索引
- azure - 在 azure aks 上监控请求持续时间