【问题标题】:Scala Software Transactional Memory and Akka Actors/AgentsScala 软件事务内存和 Akka Actors/Agents
【发布时间】: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 状态,推荐的解决方案是什么?

【问题讨论】:

    标签: scala akka actor stm


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多