Akka 编程(14): Become/Unbecome
2024-07-17 07:26:53 221人阅读
Akka支持Actor消息循环处理部分的热切换,调用context.become方法可以使用新的消息循环处理替换当前的消息处理器,被替换的消息处理器被压到一个栈结构,支持消息处理器的出栈和入栈。
注:但Actor重启时,它的消息循环处理恢复到初始的行为。
become方法的参数类型为部分函数PartialFunction[Any, Unit],例如:
2 | import akka.actor.ActorSystem |
5 | class HotSwapActor extends Actor { |
8 | case "foo" = > sender() ! "I am already angry?" |
9 | case "bar" = > become(happy) |
11 | def happy : Receive = { |
12 | case "bar" = > sender() ! "I am already happy :-)" |
13 | case "foo" = > become(angry) |
16 | case "foo" = > become(angry) |
17 | case "bar" = > become(happy) |
这种become的用法可以用来实现有效状态机(FSM),它总是替换当前的Actor行为,而不是用unbecome(退栈操作)。
另外一种用法,不是替换,而是添加到行为栈的顶部,这种情况需要当心的是,退栈(unbecome)和入栈(become)操作需要匹配,否则会造成内存泄漏。
2 | class Swapper extends Actor { |
11 | }, discardOld = false ) |
14 | object SwapperApp extends App { |
15 | val system = ActorSystem( "SwapperSystem" ) |
16 | val swap = system.actorOf(Props[Swapper], name = "swapper" ) |
更多内容请访问www.imobilebbs.com
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉:
投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。