我们有一个瘦 Web 层 ( Scalatra ),它将传入的 HTTP 请求转换为事件(案例类),然后发送到线程绑定的事件处理参与者。一些事件包含聚合根的 id,由于各种原因我们需要对其进行变异。应用程序数据的总量太大而无法放入内存,因此我们需要在对其进行操作之前通过其 id 从数据源中检索聚合。当然我们不希望事件处理参与者阻塞,所以想法是产生一个新的(基于事件的?) 加载数据、对其进行变异并将其存储回数据源的参与者。理想情况下,我想在应用程序中处理并发,而不是依赖数据源的 ACID 功能。基本上我需要对每个聚合进行序列化/事务访问。
这可以使用演员来实现吗?最好的方法是什么?ConcurrentHashMap
在事件处理参与者内部保留一个包含以聚合根 ID 为键的参与者?
还是我们必须涉及 STM:s (ScalaSTM/Akka) 或类似的东西?