【发布时间】:2016-05-25 21:47:03
【问题描述】:
我一直在构建一个数据挖掘应用程序。我使用多个参与者来查询数据源,然后记录对文本文件的增量更改。但是,多个矿工可以接收同一实体的数据。这会导致竞争条件,从而导致日志文件中出现重复的日志数据和其他异常。
为了防止这种情况,我想添加一个 Finalizer Actor 并使用 STM。我将让 Miner Actor 将实体提交到共享内存并向 Finalizer 发送消息以通知它处理该实体。通过 STM,如果实体在 Finalizer 的事务期间被另一个 Miner 更新,Finalizer 将中止事务并重新开始。当 Finalizer 成功读取(并为 GC 删除)实体时,它会向 Logger 发送一条消息。这样,Logger Actor 就不会记录重复的条目。
但是: http://doc.akka.io/docs/akka/2.4.1/scala/agents.html
参与封闭 STM 事务的代理是 2.3 中已弃用的功能。
如果现在不推荐使用 Agents 和 STM,对于共享 Actor 状态,推荐的解决方案是什么?
【问题讨论】: