我有演员进行模拟,然后发回数据。我希望能够多次运行模拟,所以我需要重置每个actor的内部状态。
如何重置actor的内部状态,以便它与我创建它时的状态相同?
答案 0 :(得分:0)
有两种方法可以做到这一点
处理名为reset
的消息,并手动重新初始化所有actor状态。
以下是处理重置字符串消息并重置actor状态的代码示例。
class FooActor extends Actor {
var maybeBars: Option[ActorRef] = _
def receive = {
case "foo" => println("foo")
case "reset" => maybeBars = _
}
}
第二种方法是在actor中抛出异常并杀死actor。在这种情况下,akka默认管理程序策略将重新启动具有初始空状态的actor。
class FooActor extends Actor {
var maybeBars: Option[ActorRef] = _
def receive = {
case "foo" => println("foo")
case "reset" => throw new Exception("reset")
}
}