Scala Software Transactional Memory和Akka Actors / Agents

时间:2016-02-15 04:46:23

标签: scala akka actor stm

我一直在构建数据挖掘应用。我使用多个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状态的推荐解决方案是什么?

1 个答案:

答案 0 :(得分:0)

我的解决方案是ScalaSTM,Actors访问单例/共享TMap。

https://nbronson.github.io/scala-stm/map_snapshots.html