2012-08-05 23 views
16

我正在学阿卡,我正在试图弄清楚如何让演员互相交谈(我们称他们为AB)。这不是一个请求/响应场景,AB随时都会发送对方的消息。Akka actorFor vs传递ActorRef

目前我有两个兄弟姐妹演员互相向两个方向传递消息。它们都直接在ActorSystem上创建。我最初将ActorRefA传递给B的构造函数。但是我不能将ActorRefB传递给构造函数A,因为它还不存在,也就是说我不能将这个方法用于循环引用。

我一直在阅读有关actorFor,这将让我看看一个演员使用它的路径。但是,我对此设置不太熟悉,因为如果路径更改,它将不会被编译器捕获。

另一种选择,考虑到每一个演员可以访问到它的父,是从AB传递消息到父,然后让家长将消息传递回落到AB。但是,这将父母与来回传递的消息类型结合在一起。

人们使用哪些策略让演员彼此认识?我是否过于谨慎地在路上寻找演员?

+0

你有没有试过在实例化你的ActorRef时使用'lazy val's?我可以想象这将有助于解决循环依赖。假设你使用斯卡拉当然... – agilesteel 2012-08-05 19:37:53

+0

我刚刚给了一个去,它的工作原理。我不知道你在定义之前引用了懒惰的val - 疯狂的东西!谢谢你的提示。我仍然有兴趣了解人们对于传递ActorRefs vs路径的感觉。 – Geoff 2012-08-05 20:45:33

+0

确保您已阅读http://doc.akka.io/docs/akka/2.0.2/general/addressing.html。 – sourcedelica 2012-08-05 21:11:16

回答

11

在我的愚见你有三个策略,这是我从更接近您的问题列表(也给我最糟糕的模式,我很抱歉)

策略1:创建演员A和演员B,将actorRef A传递给actor B的构造函数。您的乒乓球将从actor B发送消息给actor A,actor A可以简单地使用发件人引用进行回复。 (或者反过来)


策略2:在创建应用程序中的层,负责命名的护理:它在创建演员的分配名称,以及查询时。这将问题集中在一个点上。


策略3:你不知道两兄妹演员扮演乒乓球不更换一个更好的,更模块化的演员层级结构,其中基本上每个演员与他的父母和他的孩子只有沟通,并没有关于他的兄弟姐妹的知识。

+3

策略3听起来最明智。我有点担心父母会做大量的接线工作,但我认为没关系,因为这是父母协调其子女的工作(除了转发信息根本没有太多工作)。 – Geoff 2012-08-06 17:42:40

相关问题