我一直在构建数据挖掘应用。我使用多个actor来查询数据源,然后我将对文本文件的增量更改记录下来。但是,多个矿工可以在同一实体上接收数据。这会导致竞争条件,从而导致日志文件中出现重复的日志数据和其他异常。
为了防止这种情况,我想添加一个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状态的推荐解决方案是什么?
答案 0 :(得分:0)
我的解决方案是ScalaSTM,Actors访问单例/共享TMap。