Akka支持Actor消息循环处理部分的热切换,调用context.become方法可以使用新的消息循环处理替换当前的消息处理器,被替换的消息处理器被压到一个栈结构,支持消息处理器的出栈和入栈。
注:但Actor重启时,它的消息循环处理恢复到初始的行为。
become方法的参数类型为部分函数PartialFunction[Any, Unit],例如:
1 | import akka.actor.Actor |
2 | import akka.actor.ActorSystem |
3 | import akka.actor.Props |
4 |
5 | class HotSwapActor extends Actor { |
6 | import context. _ |
7 | def angry : Receive = { |
8 | case "foo" = > sender() ! "I am already angry?" |
9 | case "bar" = > become(happy) |
10 | } |
11 | def happy : Receive = { |
12 | case "bar" = > sender() ! "I am already happy :-)" |
13 | case "foo" = > become(angry) |
14 |