我试图弄清楚我将Akka ActorRef
传递给其他演员的用法是不是反模式。
我的系统中有一些演员。有些是长寿的(restClientRouter
,publisher
),有些人在完成工作后死亡(geoActor
)。短命的演员需要向长寿演员发送信息,因此需要他们ActorRef
。
//router for a bunch of other actors
val restClientRouter = createRouter(context.system)
//publishers messages to an output message queue
val publisher: ActorRef = context.actorOf(Props(new PublisherActor(host, channel)), name = "pub-actor")
//this actor send a message to the restClientRouter and then sends the response
//to the publisher
val geoActor = context.actorOf(Props(new GeoInferenceActor(restClientRouter, publisher)), name = "geo-inference-actor")
正如您所看到的,我将ActorRefs(restClientRouter
和publisher
)传递给GeoInferenceActor
的构造函数。这样可以吗?有没有更好的方法呢?
答案 0 :(得分:23)
有几种很好的方法可以将actor引入“需要它们的actor实例”。
1)使用构造函数args需要的refs创建actor(这就是你正在做的事情)
2)在创建实例后通过消息传入所需的引用
您的解决方案完全可以接受,甚至由Akka的技术负责人Roland Kuhn在这篇文章中建议:
答案 1 :(得分:17)