实现弱引用的Eventbus演员?

时间:2013-01-02 12:12:38

标签: scala akka

说未引用的演员仍然订阅了事件流是否正确?至少,这是我从Akka实验中得到的......

我正在尝试在EventBus场景中为actor实现弱引用。在这些情况下,事件监听器/演员通常会来来去去。与应该一直存在的独立演员不同。显然取消注册当然可行。但我并不总是能够认识到这一点的合适时机。

Akka是否提供此类用例?

val as = ActorSystem.create("weak")
var actor = as.actorOf(Props[ExceptionHandler])
as.eventStream.subscribe(actor,classOf[Exception])

// an event is published & received
as.eventStream.publish(new KnownProblem)

//session expires or whatever that makes the actor redundant
actor = null
(1 to 30).foreach(_ => System.gc)

// an event is published & STILL received
as.eventStream.publish(new KnownProblem)

1 个答案:

答案 0 :(得分:0)

好吧,我实际上无法实现它,但演员正停止在GC上。使用Scala 2.9.2(REPL)+ Akka 2.0.3。

EventBus WeakReference[ActorRef]没有帮助 - 因为在Akka中你还有dungeon ChildrenContainerself.children),也可能{ {1}}订阅生命周期事件。我没有尝试的事情 - 用调度员创建只知道我们新的闪亮Monitor的演员 - 所以也许我错过了这一点?

这里是REPL的代码(使用适当的导入启动它,并在两个步骤中WeakEventBus):

:paste
相关问题