2

我们有一个瘦 Web 层 ( Scalatra ),它将传入的 HTTP 请求转换为事件(案例类),然后发送到线程绑定的事件处理参与者。一些事件包含聚合根的 id,由于各种原因我们需要对其进行变异。应用程序数据的总量太大而无法放入内存,因此我们需要在对其进行操作之前通过其 id 从数据源中检索聚合。当然我们不希望事件处理参与者阻塞,所以想法是产生一个新的(基于事件的?) 加载数据、对其进行变异并将其存储回数据源的参与者。理想情况下,我想在应用程序中处理并发,而不是依赖数据源的 ACID 功能。基本上我需要对每个聚合进行序列化/事务访问。

这可以使用演员来实现吗?最好的方法是什么?ConcurrentHashMap在事件处理参与者内部保留一个包含以聚合根 ID 为键的参与者?

还是我们必须涉及 STM:s (ScalaSTM/Akka) 或类似的东西?

4

1 回答 1

3

您可以将您的“聚合根”表示为 actor。当您想要改变聚合根时,您可以从您的请求处理参与者发送一条消息来执行此操作。您还可以有一个中间代理actor,它将消息转发给正确的actor,并通过实例化表示按需数据的actor并根据需要停止它们来管理聚合根actor的缓存(通过 id ) 。如果您需要在代表数据的参与者之间协调突变,则需要 STM。

于 2011-12-05T21:39:45.150 回答