如何访问通过 guice 创建的 akka 系统?
Posted
技术标签:
【中文标题】如何访问通过 guice 创建的 akka 系统?【英文标题】:How to gain access to the akka system created via guice? 【发布时间】:2015-09-21 19:15:31 【问题描述】:所以我在这里遵循模板: https://github.com/rocketraman/activator-akka-scala-guice#master
我已将此代码移植到 2.4 版 Play 应用中。
现在我可以创建演员系统并在 Global 类中创建演员并将初始消息发送给演员。我还设置了尝试与某些演员交谈并获得状态的路线,但我无法访问,因为我无法访问原始演员系统。
我怎样才能做到这一点?我认为在较旧的 Play 版本中,我们有 getControllerInstance;用于以下情况:
/**
* Controllers must be resolved through the application context. There is a special method of GlobalSettings
* that we can override to resolve a given controller. This resolution is required by the Play router.
*/
override def getControllerInstance[A](controllerClass: Class[A]): A = injector.getInstance(controllerClass)
由此,我们可以在控制器中注入某些依赖项。既然这被删除了,我们就不能再这样做了。有没有办法解决这个问题?
【问题讨论】:
我有点困惑。为什么要创建一个新的 Akka 系统? Play 已经包含一个,您可以通过Akka.system()
访问它。
【参考方案1】:
It's pretty clear how to inject Akka system in to the controller
import play.api.mvc._
import akka.actor._
import javax.inject._
import actors.HelloActor
@Singleton
class Application @Inject() (system: ActorSystem) extends Controller
val helloActor = system.actorOf(HelloActor.props, "hello-actor")
//...
注意@Singleton这里只是存储对actor的引用-而不是ActorSystem,it's handled by the Play in backend
Play 应用程序定义了一个特殊的 Actor 系统,供 应用。该参与者系统遵循应用程序生命周期和 应用程序重新启动时自动重新启动。
【讨论】:
以上是关于如何访问通过 guice 创建的 akka 系统?的主要内容,如果未能解决你的问题,请参考以下文章
访问由 Source.actorRef 创建的 akka 流 Source 的底层 ActorRef