2017-01-01 202 views
1

我有演员进行模拟,然后发回数据。我希望能够多次运行模拟,所以我需要重置每个演员的内部状态。将Akka演员重置为初始状态

如何重置演员的内部状态,以便它具有与创建演员时相同的状态?

+0

为什么不使用'成为'?网上有很多例子 – zella

回答

0

有两种方法可以做到这

手动复位

处理一个被称为reset和消息手动自己重新初始化所有演员的状态。

以下是处理重置字符串消息并重置参与者状态的代码示例。

class FooActor extends Actor { 
    var maybeBars: Option[ActorRef] = _ 
    def receive = { 
    case "foo" => println("foo") 
    case "reset" => maybeBars = _ 
    } 
} 

自动复位

第二种方式是抛出一个异常,在演员和杀演员。在这种情况下,阿卡默认管理员策略将重新启动具有初始空状态的参与者。

class FooActor extends Actor { 
    var maybeBars: Option[ActorRef] = _ 
    def receive = { 
    case "foo" => println("foo") 
    case "reset" => throw new Exception("reset") 
    } 
}