将共享数据加载到actor中的最佳方法是什么?

时间:2014-08-23 18:11:20

标签: scala akka

我有一个演员计算数据在一边,称之为A.另一方面,我有演员B接收演员A的数据.B的全部目的是检查数据是否相关并采取行动即,即。 Actor B必须从DB源加载数据并将其与A的结果进行比较。

B加载的数据几乎从未改变过。它必须在应用程序启动时加载一次,然后actor应该使用它可以使用的任何缓存版本。

有没有办法与Akka一起做?

1 个答案:

答案 0 :(得分:0)

在计算数据后,只需从A发送消息到B.之后,B可以根据验证结果切换到“已验证”或“未验证”状态,并根据其状态对后续消息做出反应。

如何使用额外信息处理不同状态的示例:

class MyDBActor extends Actor {
  def receive = starting
  def starting = {
    case data:DataFromA => 
        dbData = <load data from DB>
        if (<data is OK>)
           context.become(verified(dbData))
        else
           context.become(unverified)
  }
  def verified(dbData:DataFromDB) = {
    case whatevermessage => 
      < do something with message and data>
  }
  def unverified => {
    case _ => <throw exception, log unverified access, etc>
  }
}

另一种选择可能是使用数据库数据来实例化一个新的actor,如果且只有数据是正确的,它将被实例化,并使程序的其他部分试图与该actor交谈。如果未验证数据,则该actor不存在(但您将以某种方式处理异常)。