Lagom Persistent Entities Actors是? /演员模特

问题描述 投票:0回答:2

我正在使用Lagom的persitent实体,并阅读Cassandra支持实现,保存读取端查询的状态。所以试图理解,持久性实体也是演员吗?意味着一次只能处理一个事件/命令?事件也是“持久实体”处理的消息吗?我找不到有关以下内容的文档:

  • 每个实体一旦创建就会持久存储在内存中吗?例如:如果用户是一个实体,并且如果用户对象(实体)持久存储在内存中创建新用户,假设近80%的用户长时间离线,该模型如何有效地进行缩放?
  • 如果我们通过一个模型,其中演员在一些超时后被删除...演员是否必须再次读取所有事件来处理另一个请求?这不会增加延迟吗?
  • 我看到的大多数例子都与实现购物车/类似的东西有关。如果通过命令/查询处理向购物车添加商品,如何确保相同的商品不会两次添加到购物车中?阅读/更新依赖于不同的观点/真实来源。 (我知道这可以在任何具有并发用户的应用程序中发生,但使用Actors的情况似乎很常见)
akka actor lagom
2个回答
2
投票

持久性实体也是演员吗?这意味着一次只能处理一个事件/命令?

我不会这样问这个问题; actor确实执行同步消息处理,但某些事情执行同步消息处理并不意味着它是一个actor。

现在语义已经不在了,我们可以解决这个问题... PersistentEntitys在技术上是not actors ...但是,PersistentEntityRegistrys will create是一个PersistentActor

  • 每个实体一旦创建就会持久存储在内存中吗?

根据Akka持久性快照(请参阅here)机制,实体将保留在您使用的任何商店中。

  • 如果我们通过一个模型,其中演员在一些超时后被删除...演员是否必须再次读取所有事件来处理另一个请求?

同样,快照将有很大帮助。

  • 如果通过命令/查询处理向购物车添加商品,如何确保相同的商品不会两次添加到购物车中?

您可以阅读更多关于Akka actor here的交付语义。


1
投票
  1. 在可配置的不活动时间后,将从内存中删除持久化实体。
  2. 通过读取最近的快照及其后的每个事件,将持久化实体再次加载到内存中。
  3. 可以通过比较从事件日志(事实来源)构建的持久实体状态来验证命令。您可以将产品存储在内部状态,并了解何时再次添加产品。然后,您可以通过不发出事件并返回错误来拒绝此命令。
© www.soinside.com 2019 - 2024. All rights reserved.